不确定这是否属于这个 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
列出重现问题的步骤:
描述您收到的结果:
如果远程网络驱动程序在处理 /NetworkDriver.Leave 时出现错误,docker 仍然会杀死并移除容器,但不会移除端点。 这允许 docker 的内部数据库认为即使容器被删除,端点仍然存在。
当您尝试删除网络时,会返回此错误
docker network rm net1
Error response from daemon: network net1 has active endpoints
描述你期望的结果:
如果 /NetworkDriver.Leave 返回错误,则不应允许 Docker 终止或删除容器。
此问题似乎非常间歇性,并且不会经常发生。
@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感谢您提出这个问题。 几个问题
docker network ls
输出吗?/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 过滤器,但它是二进制文件。
我通过直接 API 调用 (dockerode) 创建了网络
这已经多次工作(创建和删除),我认为在这种情况下,我docker rm -f <container-id>
但我不肯定,我可能已经对机器进行了电源循环......
希望有帮助。
--布兰登
@mavenugo如果docker network disconnect -f {network} {endpoint-name}
你的意思是docker network disconnect [OPTIONS] NETWORK CONTAINER
每docker 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
总之:
在断开所有与网络的连接后, @mavenugo解决方案和有用。
再次感谢@mavenugo从 2020 年开始
@mavenugo如果
docker network disconnect -f {network} {endpoint-name}
你的意思是docker network disconnect [OPTIONS] NETWORK CONTAINER
每docker 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
在拱门上。 服务重启有帮助。
最有用的评论
@keithbentrup这是一个陈旧的端点案例。 当该容器最初被移除(使端点处于这种状态)时,您是否碰巧有错误日志。
顺便说一句,如果容器被移除,但端点仍然可见,那么可以使用
docker network disconnect -f {network} {endpoint-name}
强制断开端点。 您可以从docker network inspect {network}
命令获取端点名称。