无法杀死的僵尸码头工人容器

时间:2018-09-23 05:52:43

标签: docker docker-compose

我使用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)

2 个答案:

答案 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