记录下如何更改已停止容器的属性,比如启动一个busybox,但是启动命令里面没有加-it
选项,那么容器启动后就会直接退出,因为sh
命令在没有交互模式下会直接退出,所有容器也会随之停止。-it参数含有请执行docker run --help
查看。
上面停止的容器,就算docker restart重启后,容器也还是会立马退出。要想容器继续运行,则需要改变容器的属性,比如打开-it
,或者覆盖CMD
命令。那怎么修改呢?docker container update
?这句命令修改的属性并没有能实现上面的需求。这里可以修改容器的配置文件来达到目的。
首先查看容器id:
# docker ps -a | grep box
d8fcdb33a70c busybox "sh" 10 hours ago Exited (255) 9 minutes ago
这里d8fcdb33a70c
则是容器ID。然后进入容器在主机上的目录,如果没有修改过docker的默认配置目录,则为
# cd /var/lib/docker/containers/d8fcdb33a70c47b2c14aef0428069df9672f80ab52d76483a0062e29a617e98a/
# ls
checkpoints config.v2.json d8fcdb33a70c47b2c14aef0428069df9672f80ab52d76483a0062e29a617e98a-json.log hostconfig.json hostname hosts mounts resolv.conf resolv.conf.hash
可以看到如有config.v2.json
文件里面则包含了"Tty":false,"OpenStdin":false,
以及"Cmd":["sh"]
参数设置,注意不能直接。需要先停止docker服务。不然修改的文件,会被重新还原回去。所以
# systemctl stop docker
# vi config.v2.json
# systemctl start docker
# docker restart d8fcdb33a70c
虽然此种方式可以实现需求,但是并不能用于生产,因为主机上很多容器,如果停止了docker服务,则所有容器也都会停了,这里只是提供一种思路而已,或者更深入的,可以找下如何不停止服务修改文件,亦或者绕过docker的防护机制等。
网友评论