Moby: 无法删除网络“具有活动端点”

创建于 2015-10-20  ·  59评论  ·  资料来源: moby/moby

不确定这是否属于这个 repo 或 libnetwork。

码头工人版本: Docker version 1.9.0-rc1, build 9291a0e
码头工人信息:

Containers: 0
Images: 5
Engine Version: 1.9.0-rc1
Storage Driver: devicemapper
 Pool Name: docker-253:0-390879-pool
 Pool Blocksize: 65.54 kB
 Base Device Size: 107.4 GB
 Backing Filesystem: xfs
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 2.023 GB
 Data Space Total: 107.4 GB
 Data Space Available: 11.62 GB
 Metadata Space Used: 1.7 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.146 GB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Deferred Deletion Enabled: false
 Deferred Deleted Device Count: 0
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.93-RHEL7 (2015-01-28)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.10.0-229.14.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
CPUs: 2
Total Memory: 1.797 GiB
Name: carbon1.rmb938.com
ID: IAQS:6E74:7NGG:5JOG:JXFM:26VD:IAQV:FZNU:E23J:QUAA:NI4O:DI3S

uname -a: Linux carbon1.rmb938.com 3.10.0-229.14.1.el7.x86_64 #1 SMP Tue Sep 15 15:05:51 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

列出重现问题的步骤:

  1. 使用远程驱动程序创建网络
  2. 运行连接到网络的容器
  3. 杀死并移除容器
  4. 移除网络

描述您收到的结果:

如果远程网络驱动程序在处理 /NetworkDriver.Leave 时出现错误,docker 仍然会杀死并移除容器,但不会移除端点。 这允许 docker 的内部数据库认为即使容器被删除,端点仍然存在。

当您尝试删除网络时,会返回此错误

docker network rm net1      
Error response from daemon: network net1 has active endpoints

描述你期望的结果:

如果 /NetworkDriver.Leave 返回错误,则不应允许 Docker 终止或删除容器。

arenetworking

最有用的评论

@keithbentrup这是一个陈旧的端点案例。 当该容器最初被移除(使端点处于这种状态)时,您是否碰巧有错误日志。
顺便说一句,如果容器被移除,但端点仍然可见,那么可以使用docker network disconnect -f {network} {endpoint-name}强制断开端点。 您可以从docker network inspect {network}命令获取端点名称。

所有59条评论

此问题似乎非常间歇性,并且不会经常发生。

@rmb938我们在悬空端点方面遇到了一些问题,并已通过 #17191 解决。 RC2 应该有一个修复(或最新的主)。 对于 RC1 测试人员(非常感谢),我们可能需要一个额外的解决方法来在启动 RC2 之前清理状态。 我们将更新适当的文档。

惊人的。 谢谢。

@mavenugo我只是在 1.10.0 中重现了这个:

似乎#17191 不是一个完整的解决方案......

你有解决办法吗? 即使弹跳 docker 守护进程似乎也不能解决问题。

(如果我能为您提供更多调试信息,请告诉我,它仍在我的机器上重现)

我也在 1.10.3 中复制了这个并通过谷歌登陆这里寻找解决方法。 我无法强制断开活动端点 b/c 通过docker network inspect列出的容器都不存在。

我最终不得不重新创建我的 consul 容器并重新启动 docker 守护进程。

ping @mavenugo你想重新打开这个问题,还是更喜欢一个新问题,以防它有不同的根本原因?

澄清,码头工人 1.10.1

Client:
 Version:      1.10.1
 API version:  1.22
 Go version:   go1.4.3
 Git commit:   9e83765
 Built:        Fri Feb 12 12:41:05 2016
 OS/Arch:      linux/arm

Server:
 Version:      1.10.1
 API version:  1.22
 Go version:   go1.4.3
 Git commit:   9e83765
 Built:        Fri Feb 12 12:41:05 2016
 OS/Arch:      linux/arm

让我重新打开这个进行调查

Madhu,已分配给您,但请随时重新分配,如果它已经存在,请指出相关的解决方法 :smile:

@keithbentrup @brendandburns感谢您提出这个问题。 几个问题

  1. 您是否使用任何多主机网络驱动程序(例如 Overlay 驱动程序)。 你能分享一下docker network ls输出吗?
  2. 如果您不使用多主机驱动程序,那么您能否分享/var/lib/docker/network/files/local-kv.db文件(通过某个文件共享网站)以及您要删除哪个network文件? 网络最初是如何创建的?

供参考。 对于多主机网络驱动程序,docker 在 KV-Store 中为跨集群的网络维护端点。 因此,如果该集群中的任何主机在该网络中仍有一个活动端点,我们将看到此错误,这是预期情况。

@thaJeztah PTAL 我在上面的评论并基于场景,这不一定是错误。 如果有帮助,我可以保持这个问题开放。

@mavenugo是的,我通过

当我在每个单独节点上docker network inspect网络时,1 个节点列出了 1 个不再存在的容器,因此docker rm -fv无法使用容器名称或 ID 删除。

@keithbentrup这是一个陈旧的端点案例。 当该容器最初被移除(使端点处于这种状态)时,您是否碰巧有错误日志。
顺便说一句,如果容器被移除,但端点仍然可见,那么可以使用docker network disconnect -f {network} {endpoint-name}强制断开端点。 您可以从docker network inspect {network}命令获取端点名称。

@brendandburns你能帮忙回复https://github.com/docker/docker/issues/17217#issuecomment -195739573 吗?

@mavenugo抱歉耽搁了。 我没有使用 docker 多主机网络 afaik。 它是一个单节点树莓派,除了通过 hypriot 安装 docker 之外,我什么都没做。

这是您请求的输出( network是我无法删除的网络)

$ docker network ls
NETWORK ID          NAME                DRIVER
d22a34456cb9        bridge              bridge              
ef922c6e861e        network             bridge              
c2859ad8bda4        none                null                
150ed62cfc44        host                host 

附加了 kv 文件,我不得不将其命名为 .txt 以绕过 github 过滤器,但它是二进制文件。

本地-kv.db.txt

我通过直接 API 调用 (dockerode) 创建了网络

这已经多次工作(创建和删除),我认为在这种情况下,我docker rm -f <container-id>但我不肯定,我可能已经对机器进行了电源循环......

希望有帮助。
--布兰登

@mavenugo如果docker network disconnect -f {network} {endpoint-name}你的意思是docker network disconnect [OPTIONS] NETWORK CONTAINERdocker network disconnect --help ,我试过了,但它抱怨(并不奇怪) No such container

如果您的意思是EndpointID而不是容器名称/ID,我没有尝试(但下次会),因为这不是--help建议的内容。

@keithbentrup我的意思是在 v1.10.x 中可用的-f选项。 强制选项还考虑来自集群中其他节点的端点名称。 因此,如果您使用的是 docker v1.10.x,我之前的说明将适用于-f选项。

@brendandburns感谢您提供信息,缩小问题范围非常有用。 存在对导致此问题的端点的过时引用。 过时的引用很可能是由清理端点时的电源循环引起的。 我们将在 1.11 中解决这个不一致问题。

@mavenugo很高兴它有所帮助。 与此同时,如果我把那个文件吹掉,事情还会有效吗?

谢谢
--布兰登

@brendandburns是的。 请继续。 它对你来说很好用。

@mavenugo我想你误解了我。 我在 v1.10.x 上使用了-f选项(在我的 shell 历史记录中验证),但是使用容器 id(不是端点 id)b/c 这就是帮助建议的(容器不是端点)。 如果它打算与容器 id 或端点 id 一起使用,那么它是一个错误 b/c,当容器不再存在时,它肯定不会与容器 id 和-f选项断开连接。

在尝试删除 docker_gwbridge 时,我能够重新创建一个条件,这可能会减轻一些混乱。
当我使用指向 swarm 管理器的 docker 客户端时,我遇到了以下输出:

~/D/e/m/compose (develop) $ docker network inspect docker_gwbridge
[
    {
        "Name": "docker_gwbridge",
        "Id": "83dfeb756951d3d175e9058d0165b6a4997713c3e19b6a44a7210a09cd687d54",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1/16"
                }
            ]
        },
        "Containers": {
            "41ebd4fc365ae07543fd8454263d7c049d8e73036cddb22379ca1ce08a65402f": {
                "Name": "gateway_41ebd4fc365a",
                "EndpointID": "1cb2e4e3431a4c2ce1ed7c0ac9bc8dee67c06982344a75312e20e4a7d6e8972c",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.enable_icc": "false",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.name": "docker_gwbridge"
        }
    }
]
~/D/e/m/compose (develop) $ docker network disconnect -f docker_gwbridge 41ebd4fc365ae07543fd8454263d7c049d8e73036cddb22379ca1ce08a65402f
Error response from daemon: No such container: 41ebd4fc365ae07543fd8454263d7c049d8e73036cddb22379ca1ce08a65402f
~/D/e/m/compose (develop) $ docker network disconnect -f docker_gwbridge 1cb2e4e3431a4c2ce1ed7c0ac9bc8dee67c06982344a75312e20e4a7d6e8972c
Error response from daemon: No such container: 1cb2e4e3431a4c2ce1ed7c0ac9bc8dee67c06982344a75312e20e4a7d6e8972c
~/D/e/m/compose (develop) $ docker network rm docker_gwbridge
Error response from daemon: 500 Internal Server Error: network docker_gwbridge has active endpoints

我首先尝试按容器名称(未显示)删除容器,然后按 id,然后按容器端点 id。 没有一个成功。 然后登录docker主机,使用本地docker客户端通过docker unix socket发出命令:

root@dv-vm2:~# docker network disconnect -f docker_gwbridge 41ebd4fc365ae07543fd8454263d7c049d8e73036cddb22379ca1ce08a65402f
Error response from daemon: endpoint 41ebd4fc365ae07543fd8454263d7c049d8e73036cddb22379ca1ce08a65402f not found
root@dv-vm2:~# docker network disconnect -f docker_gwbridge 1cb2e4e3431a4c2ce1ed7c0ac9bc8dee67c06982344a75312e20e4a7d6e8972c
Error response from daemon: endpoint 1cb2e4e3431a4c2ce1ed7c0ac9bc8dee67c06982344a75312e20e4a7d6e8972c not found
root@dv-vm2:~# docker network rm docker_gwbridge
Error response from daemon: network docker_gwbridge has active endpoints
root@dv-vm2:~# docker network disconnect -f docker_gwbridge gateway_41ebd4fc365a
root@dv-vm2:~# docker network rm docker_gwbridge
root@dv-vm2:~# docker network inspect docker_gwbridge
[]
Error: No such network: docker_gwbridge

1)注意swarm vs direct docker client的输出:swarm指的是容器; docker 指的是端点。 这可能应该保持一致。
2) 唯一成功的选项是提供端点名称(不是容器名称或 id,或端点 id)。 --help应该清除向上或多个输入应该被接受。
3)我没有用 swarm 测试端点名称,所以我不知道这是否有效。

@keithbentrup 那是正确的。 正如我之前建议的那样。 docker network disconnect -f {network} {endpoint-name} ... 请使用端点名称。 我们也可以增强它以支持端点 ID。 但我想确认通过使用强制选项,您是否能够取得进展。

@mavenugo但你的建议不是帮助所说的。 此外,它缺乏 id/name 可互换的大多数 cmds 的一致性。

除非其他人找到这个线程,否则其他人会重复同样的问题,所以在添加对端点 ID 的支持之前,修复--help

@keithbentrup我们将修复 --help 和功能。

我刚刚在尝试docker-compose down用 docker v1.11.2 重现了这个问题。
之前尝试运行docker-compose down确实关闭了 app_front 网络。

$ docker-compose down
Removing network app_front
WARNING: Network app_front not found.
Removing network app_back
ERROR: network app_back has active endpoints
$ docker network inspect app_back                                                            
[                                                                                                    
    {                                                                                                
        "Name": "app_back",                                                                  
        "Id": "4a8d557eda7ce06d222fc0a9053069f44e75d25147300796686522a872261245",                    
        "Scope": "local",                                                                            
        "Driver": "bridge",                                                                          
        "EnableIPv6": false,                                                                         
        "IPAM": {                                                                                    
            "Driver": "default",                                                                     
            "Options": null,                                                                         
            "Config": [                                                                              
                {                                                                                    
                    "Subnet": "172.22.0.0/16",                                                       
                    "Gateway": "172.22.0.1/16"                                                       
                }                                                                                    
            ]                                                                                        
        },                                                                                           
        "Internal": false,                                                                           
        "Containers": {                                                                              
            "702e9916e86b7f77af363014134f160a8dcd189399719e062069c10f735cb927": {                    
                "Name": "app_db_1",                                                          
                "EndpointID": "1decedbca5bc704be84f19e287926361d196d20fe2a9bbf092ab15b37b856b3a",    
                "MacAddress": "02:42:ac:16:00:02",                                                   
                "IPv4Address": "172.22.0.2/16",                                                      
                "IPv6Address": ""                                                                    
            }                                                                                        
        },                                                                                           
        "Options": {},                                                                               
        "Labels": {}                                                                                 
    }                                                                                                
]                                                                                                    

码头工人信息

Containers: 17                                                                                   
 Running: 1                                                                                      
 Paused: 0                                                                                       
 Stopped: 16                                                                                     
Images: 140                                                                                      
Server Version: 1.11.2                                                                           
Storage Driver: aufs                                                                             
 Root Dir: /mnt/sda1/var/lib/docker/aufs                                                         
 Backing Filesystem: extfs                                                                       
 Dirs: 245                                                                                       
 Dirperm1 Supported: true                                                                        
Logging Driver: json-file                                                                        
Cgroup Driver: cgroupfs                                                                          
Plugins:                                                                                         
 Volume: local                                                                                   
 Network: bridge null host                                                                       
Kernel Version: 4.4.12-boot2docker                                                               
Operating System: Boot2Docker 1.11.2 (TCL 7.1); HEAD : a6645c3 - Wed Jun  1 22:59:51 UTC 2016    
OSType: linux                                                                                    
Architecture: x86_64                                                                             
CPUs: 1                                                                                          
Total Memory: 1.955 GiB                                                                          
Name: default                                                                                    
ID: LKRP:E2TX:KNVZ:UD4M:FIGG:ZROO:CIA5:WBKH:RNUB:KXTQ:E6DC:545P                                  
Docker Root Dir: /mnt/sda1/var/lib/docker                                                        
Debug mode (client): false                                                                       
Debug mode (server): true                                                                        
 File Descriptors: 18                                                                            
 Goroutines: 38                                                                                  
 System Time: 2016-06-15T22:44:13.34779866Z                                                      
 EventsListeners: 0                                                                              
Username: tohagan                                                                                
Registry: https://index.docker.io/v1/                                                            
Labels:                                                                                          
 provider=virtualbox                                                                             

尝试断开群覆盖端点时遇到一些问题,

来自守护进程的错误响应:网络 es-swarm-overlay 具有活动端点

@rmb938请说有什么问题? 这个问题可能还有其他问题吗?

@mavenugo

docker network disconnect -f  [Network-Name] [Endpoint-Name] 

这对我有用。

我可能对docker 1.13.0有同样的问题。

由于此线程中没有人给出我所做的示例,因此我将其发布。

对于完成,这是启动它的错误。 这可能是因为我有codekitchen/dinghy-http-proxy:2.5.0侦听端口 80。

$ docker-compose -f deploy/docker-compose/docker-compose.yml
Creating network "dockercompose_default" with the default driver
Creating dockercompose_front-end_1
# and so on..

ERROR: for edge-router  Cannot start service edge-router: driver failed programming external connectivity on endpoint dockercompose_edge-router_1 (3ed8fb6cf4bc221dce615a9a3c5b8e4f0f8332e00e6c6d9b9f9bf0b09da57b36): Bind for 0.0.0.0:80 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.

并试图将其全部压倒:

$ docker-compose -f deploy/docker-compose/docker-compose.yml down
Stopping dockercompose_front-end_1
# and so on..
ERROR: network dockercompose_default has active endpoints

以及我如何杀死网络:

$ docker network inspect dockercompose_default
[
    {
        "Name": "dockercompose_default", # <--- Param 1
        "Id": "dd1326487a637df8a4a7a11856864a0059fca45cb63e8363bfe5196082d42d6e",
        "Created": "2017-02-08T00:22:41.341653339Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Containers": {
            "ea7a142c113700145e894c950b18fd4dec8a53e04a45045f1fb71c47eae1a13b": {
                "Name": "dinghy_http_proxy", # <--- Param 2
                "EndpointID": "38f362af8b22e575cc987f68399a97f3ed10abf2c4cc365460dba768f2df8daa",
                "MacAddress": "02:42:ac:12:00:0d",
                "IPv4Address": "172.18.0.13/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
$ docker network disconnect -f dockercompose_default dinghy_http_proxy
$ docker network rm dockercompose_default
dockercompose_default

@nicolaiskogheim有一个有效的解决方案。 但是,我的团队有一个包含约 20 个容器的 docker-compose 文件。 所以我找到了另一个解决方案。

我想说的是,您也可以重新启动 docker 守护进程(例如,centos 上的systemctl restart docker ),然后网络和容器之间的链接将消失。 然后你就可以成功docker system prune -f

@mdotson @nicolaiskogheim请开一个新问题; 尽管错误消息相同,但此处讨论的原始问题已得到修复。 您是否只在使用 docker compose 时看到这一点? 在这种情况下,docker compose 执行操作的顺序也可能是一个问题?

@thaJeztah仅适用于

不确定,但无论哪种方式,我认为大多数人都会在谷歌上搜索错误消息,然后到这里寻找一些命令来复制和粘贴以解决他们的问题。

我遇到了与@nicolaiskogheim@mdotson相同的问题,我的 influxdb 容器内存不足并且变得不健康。 我无法删除停止或删除(我设法使用强制模式删除)。
在那之后,我试图用docker-compose再次启动 docker :

# docker-compose -f /etc/docker/docker-compose.yml up -d
Creating influxdb1

ERROR: for influxdb  Cannot start service influxdb: service endpoint with name influxdb1 already exists
ERROR: Encountered errors while bringing up the project.

比试图删除网络:

# docker network rm 834ea759c916
Error response from daemon: network docker_default has active endpoints

然后我尝试了@nicolaiskogheim解决方案:

# docker network disconnect -f docker_default influxdb1
Client:
 Version:      1.13.1
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 06:50:14 2017
 OS/Arch:      linux/amd64

Server:
 Version:      1.13.1
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 06:50:14 2017
 OS/Arch:      linux/amd64
 Experimental: false
docker-compose version 1.11.1, build 7c5d5e4
docker-py version: 2.0.2
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016

docker service restart 为我解决了这个问题。

sudo service docker restart

docker network rm <network name>

尝试删除堆栈时,我看到了同样的问题:

> sudo docker stack rm my-stack
Removing network my-stack_default
Failed to remove network g0450dknntdsfj1o055mk4efm: Error response from daemon: network my-stack_default has active endpointsFailed to remove some resources

我首先像这样创建了堆栈:

sudo docker stack deploy -c docker-compose.yml --with-registry-auth my-stack

我正在使用这个版本:

Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 17:14:09 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 17:14:09 2017
 OS/Arch:      linux/amd64
 Experimental: false

幸运的是, sudo service docker restart修复了它,但仍然不是理想的行为。

在 17.07.0-ce 遇到它, disconnect方法不起作用,然后重新启动 docker 并再次运行rm成功。

我也用 17.06-ce swarm 集群遇到过这个问题; 除了重新启动之外,其他选项都用完了。

sudo service docker restart在 ubuntu 上为我摆脱了它,允许我再次部署和启动我的容器。

如果其中一个容器拒绝被杀死(发生的次数比我希望的要多),也可以使用。 烦人,因为它让我因为一个恶作剧的容器而关闭所有服务。

在 17.09.0-ce 中也有这个问题。 重开这个!

在低内存环境中,这种情况经常发生在我身上。 看看添加内存是否会使其更好,我的进程现在正常停止。

@tomholub不,内存不是问题。 但是重新启动docker服务,然后我可以删除网络。

在尝试停止和删除正在运行的容器时,仍然不时出现此问题。 (Docker for Mac 版本 17.09.0-ce-mac35 (19611) 频道:稳定 a98b7c1b7c)

Client:
 Version:      17.09.0-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:40:09 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      17.09.0-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:45:38 2017
 OS/Arch:      linux/amd64
 Experimental: false
$ uname -a
Darwin Alexei-Workstation.local 16.7.0 Darwin Kernel Version 16.7.0: Wed Oct  4 00:17:00 PDT 2017; root:xnu-3789.71.6~1/RELEASE_X86_64 x86_64

如果我随机等待几秒钟,它通常会消失。 但它仍然存在。

顺便提一句。 对我来说,它发生在 docker-compose down --volumes --remove-orphans 期间

仍然看到这些“孤立的网络”你能重新打开@rmb938 @thaJeztah

来自守护进程的错误响应:network abcd_default id 3f2f1a6cb1cee2d82f2e2e59d10a099834a12b18eb7e3e48d6482d758bd93617 has active endpoints

docker version
Client:
 Version:      17.06.0-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:23:31 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.06.0-ce
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:19:04 2017
 OS/Arch:      linux/amd64

修剪它们的唯一方法似乎是重新启动引擎

祝你今天好运

docker-compose down
Removing network gen365cms_default
ERROR: network gen365cms_default id b6c51b1a83ee2b938ee1c7f7148347dc9ef80a8d8ed93334873f1f84b3f27c04 has active endpoints
docker version
Client:
 Version:   17.12.0-ce-rc4
 API version:   1.35
 Go version:    go1.9.2
 Git commit:    6a2c058
 Built: Wed Dec 20 15:53:52 2017
 OS/Arch:   darwin/amd64

Server:
 Engine:
  Version:  17.12.0-ce-rc4
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.9.2
  Git commit:   6a2c058
  Built:    Wed Dec 20 15:59:49 2017
  OS/Arch:  linux/amd64
  Experimental: true

这仍然可以在Docker version 18.06.1-ce, build e68fc7a上重现
似乎即使删除了 compose 文件的容器,它们的端点有时也不会被删除,这有时会在断电时发生,因此 compose 无法完全启动或完全删除。

当没有命令起作用时,请执行
sudo service docker restart
你的问题会得到解决

sudo reboot -f 。 工作 100%。

我今天遇到了类似的问题。 我所做的是我运行了“docker container ls -a”,看到几个仍在运行的容器正在利用我通过 docker stack 启动的网络。 所以当我手动杀死那些容器时,我能够删除网络

我相信我刚刚遇到了@danwdart这里提到的问题。 我在Docker version 18.09.2, build 6247962运行docker-compose -f $PATH_TO_MY_CONFIG down ,但收到以下错误:

ERROR: error while removing network: network michaelmoore_default id 6838b92e60a83f53c5637065e449f9124a2f297c482f1a7326cf247bfd38f70c has active endpoints

我实际上昨晚让我的笔记本电脑电池没电了,我很少这样做,并且在重新启动 docker 后,我能够成功运行相同的 compose“down”命令。

这对某些人来说可能很明显,但对我来说不是,只是想我会分享。

我只需要运行docker-compose rm - docker-compose down是我通常做的, ps -a没有显示任何容器,所以这真的让我绊倒,直到我运行rm cmd . 以为我会分享。

我最终遇到了同样的问题,因为网络无法删除所有动作,注意到有帮助。 我的版本是 Docker 版本 18.09.6,构建 481bc77

要修复,我已重新启动 docker 服务。 通过“sudo service docker restart”之后我可以使用“docker network rm {network}”删除

@danwdart另一个原因是当有悬空的容器时。 为了删除它们,请使用应该可以解决问题的命令docker-compose down --remove-orphans

你好,从 2019 年开始, @mavenugo我想

四年多后,这仍然是一个问题。 是否有比 10 行以上的 shell 脚本更简单的方法来断开每个容器与它们所连接的每个网络的连接? FWIW这似乎有效:

#!/usr/bin/env bash

set -o errexit -o nounset -o pipefail

trap 'rm --recursive "$workspace"' EXIT
workspace="$(mktemp --directory)"
error_log="${workspace}/error.log"

for container_id in $(docker ps --all --quiet)
do
    readarray -t network_names < <(docker inspect "$container_id" | jq --raw-output '.[] | .NetworkSettings.Networks | if . == null then empty else keys | .[] end')
    for network_name in "${network_names[@]}"
    do
        echo "Disconnecting container ${container_id} from network ${network_name}."
        exit_code=0
        docker network disconnect "$network_name" "$container_id" 2> "$error_log" || exit_code="$?"
        if [[ "$exit_code" -ne 0 ]]
        then
            if grep --fixed-strings --quiet --regexp 'not connected to network' --regexp 'not connected to the network' "$error_log"
            then
                echo 'Ignoring "not connected" error…'
            else
                cat "$error_log" >&2
                exit "$exit_code"
            fi
        fi
    done
done

总之:

  1. 设置陷阱以在退出时移除工作区。
  2. 创建工作区。
  3. 对于每个容器:

    1. 对于每个网络,容器都与:



      1. 尝试断开连接。


      2. 如果断开连接失败,因为它尚未连接到网络,请忽略错误(不幸的是,“the”是否是该错误消息的一部分似乎是随机的)。 否则失败。



在断开所有与网络的连接后, @mavenugo解决方案和有用

再次感谢@mavenugo从 2020 年开始

@mavenugo如果docker network disconnect -f {network} {endpoint-name}你的意思是docker network disconnect [OPTIONS] NETWORK CONTAINERdocker network disconnect --help ,我试过了,但它抱怨(并不奇怪) No such container

如果您的意思是EndpointID而不是容器名称/ID,我没有尝试(但下次会),因为这不是--help建议的内容。

@keithbentrup - 上面命令中的{endpoint-name}基本上是从下面命令获取的输出中的container-id/name

$deminem: docker network inspect e60b9386b9e2其中e60b9386b9e2是网络 ID。

[
    {
        "Name": "project-name-master_default",
        "Id": "e60b9386b9e20f5222513bd6166f6d8e3224e72e906e2b07376e88ba79d87b26",
        "Created": "2020-04-02T18:48:29.2694181Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "d435c36e882ec91dff780c55c0399c52b14096baea402647eaff2f1593602df9": {
                **"Name": "project-name-master_monitoring_1"**,
                "EndpointID": "7838e98efd8be4cabccc778707efadbb6194cbd73dc907f0129ee8b9119e4349",
                "MacAddress": "02:42:ac:12:00:0e",
                "IPv4Address": "172.18.0.14/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "project-name",
            "com.docker.compose.version": "1.25.4"
        }
    }
]

注意:以粗体突出显示。 "Name": "project-name-master_monitoring_1"

刚吃过

docker --version
Docker version 19.03.12-ce, build 48a66213fe
uname -a
Linux jotunheim 5.8.5-arch1-1 #1 SMP PREEMPT Thu, 27 Aug 2020 18:53:02 +0000 x86_64 GNU/Linux

在拱门上。 服务重启有帮助。

此页面是否有帮助?
0 / 5 - 0 等级