我使用docker-compose创建了一堆容器并将它们链接在一起。对于某些容器定义,我可能以restart: always
作为重启策略。
现在,我有一个postgres容器,如果停下来,它可以重生。
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8bb2b781630 postgres:latest "docker-entrypoint.s…" About an hour ago Up About an hour 5432/tcp dcat_postgres.1.z3pyl24kiq2n4clt0ua77nfx5
docker stop a8bb2b781630
a8bb2b781630
$ docker rm -f a8bb2b781630
a8bb2b781630
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93fa7b72c2ca postgres:latest "docker-entrypoint.s…" 12 seconds ago Up 4 seconds 5432/tcp dcat_postgres.1.oucuo5zg3y9ws3p7jvlfztflb
在启动服务的目录中使用docker-compose down
也不起作用。
$ docker-compose down
Removing dcat_postgres_1 ... done
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ee7fb0e98cd postgres:latest "docker-entrypoint.s…" 13 seconds ago Up 5 seconds 5432/tcp dcat_postgres.1.jhv1q6vns1avakqjxdusmbb78
我该如何杀死一个容器并使它不复存在?
编辑:即使重新启动Docker服务,容器也会重新生成。
Docker-18.06.1-ce-mac73(26764)
macOS High-Sierra(10.13.6)
答案 0 :(得分:6)
我知道了。原来这与docker swarm有关。我曾在某个时候进行过试验,但并未完全了解它的功能和作用,而且显然还停留在那儿。
我要做的就是:
docker swarm leave --force
它就像是真正的僵尸的头像。
答案 1 :(得分:4)
您可以尝试使用moby/moby
issue 10032之类的选项吗?
docker stop $(docker ps -a -q) &
docker update --restart=no $(docker ps -a -q) &
systemctl restart docker
(这里假设您只有一个正在运行的容器:您无法阻止的一个容器)
除非您using docker with a provision tool like Puppet,否则docker rm -f
就足够了。
事实证明,另一个进程(docker本身除外)负责重新启动容器(此处为docker swarm
)