Docker

Docker修改已停止容器属性

2020-06-19  本文已影响0人  香葱煎蛋饼

记录下如何更改已停止容器的属性,比如启动一个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的防护机制等。

上一篇下一篇

猜你喜欢

热点阅读