先说说这个问题的起因:

Docker容器后台运行,就必须有一个前台进程!

OK,有次手贱,把容器内的php-fpm配置文件中的daemon改为yes,导致了没有前台进程,因此,容器启动后就停止了。
那么问题变成,如何修改没有启动的容器内的文件?(PS:正常情况下可以通过 docker exec命令打开容器的一个shell终端进去修改)

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

#把要修复的容器提交为镜像
docker commit <container_id> <image_name>:<tag>
docker rm <container_id> #这个删除老的容器,反正也用不了
#查看刚建立的新镜像
REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
zhibin/php5                              2018                c6532c5ece91        10 minutes ago      1.549 GB
#利用这个新镜像创建容器,进入容器,修复配置文件
docker run -it --name tmp-fixphp5 zhibin/php5:2018 /bin/bash
#重新提交镜像
docker commit <container_id> <image_name>:<tag>
#创建修复后的容器
docker run -d --volumes-from nginx_server --name php-fpm_server_2018 --dns=10.100.17.21 --cap-add SYS_PTRACE -p 9000:9000 zhibin/php5:201802


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐