如何修复无法启动的docker容器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修复无法启动的docker容器相关的知识,希望对你有一定的参考价值。

如何修复无法启动的docker容器

背景:

测试服务器上使用docker搭建了个elasticsearch服务集群,由于需要为es安装中文分词的插件,不料安装的姿势有问题,导致无法启动了。由于是测试开发所用,也没有为容器挂载数据卷,所以容器关闭后宿主机上就没有相关的目录了。而且是plugins目录结构的原因导致es服务找不到相关文件无法启动。

解决方法,使用cp命令将整个plugins目录复制到宿主机下修改,然后再cp回容器里:

# 将plugins目录cp到宿主机
[[email protected] ~]# docker cp es1:/usr/share/elasticsearch/plugins ./
... 修改目录结构 ...
[[email protected] ~]# docker cp ./plugins/ es1:/usr/share/elasticsearch/  # cp回容器里
[[email protected] ~]# docker start es1  # 启动容器

另一个解决方法是创建镜像,把这个问题容器用docker commit提交到一个新的镜像,然后用docker run -it 基于新镜像运行一个新的容器进去改变(修复)配置文件。再通过新的容器再提交一个新的镜像,然后在基于新的镜像重新启动容器(同最初的容器)。这个方法是可行的,但问题是步骤多,而且提交了新的镜像,对于后续维护增加了复杂性。

步骤如下:

#把要修复的容器提交为镜像
[[email protected] ~]# docker commit <container_id> <image_name>:<tag>
[[email protected] ~]# docker rm <container_id>   # 删除无法启动的容器,反正也用不了

#查看刚建立的新镜像
[[email protected] ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
old-es3                   first               bf1fdb9b3a2d        54 minutes ago      550 MB
old-es2                   first               4e1a92871782        55 minutes ago      550 MB
old-es1                   first               d1a485b8f5c0        55 minutes ago      551 MB

#利用这个新镜像创建容器,进入容器,修复配置文件
[[email protected] ~]# docker run -it --name fix-es1 old-es1:first /bin/bash

#重新提交镜像
[[email protected] ~]# docker commit <container_id> <image_name>:<tag>

#创建修复后的容器
[[email protected] ~]#  docker run -d --name es1 -p 9200:9200 -p 9300:9300 ok-es1:first

以上是关于如何修复无法启动的docker容器的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“docker:来自守护进程的错误响应:无法链接到非运行容器:/db AS /odoo/db

docker如何启动并连入一个已有的容器

Docker因配置错误无法启动容器时该咋整

如何使用不同的命令启动停止的 Docker 容器?

为啥docker容器内无法启动tomcat,容器外可以

docker容器显示graylog启动成功但无法访问