Zombie docker容器,无法杀死

yam*_*yam 12 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
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

我怎样才能杀死一个容器并让它不再复活?

编辑:即使在重新启动Docker服务后,容器也会重新生成.

Docker - 18.06.1-ce-mac73(26764)

macOS High-Sierra,(10.13.6)

yam*_*yam 7

我想到了.原来它与docker swarm有关.我曾经在某些方面对它进行过实验,却没有完全理解它是什么以及它做了什么,显然它只是呆在那里.

我所要做的就是:

docker swarm leave --force
Run Code Online (Sandbox Code Playgroud)

它就像一个真正的僵尸的头像.


Von*_*onC 5

你可以尝试像一个选择moby/moby问题10032

docker stop $(docker ps -a -q) &
docker update --restart=no $(docker ps -a -q) &
systemctl restart docker
Run Code Online (Sandbox Code Playgroud)

(这里假设您只有一个正在运行的容器:您无法阻止启动的容器)

docker rm -f不过,A 应该足够了,除非您将docker与诸如Puppet之类的置备工具一起使用

事实证明,另一个进程(docker本身除外)负责重新启动容器(此处为docker swarm