【问题标题】:Docker: no containers, but network cannot be removed due to active endpointsDocker:没有容器,但由于活动端点而无法删除网络
【发布时间】:2021-07-29 10:38:01
【问题描述】:

我有一个 Jenkins 构建,其中包括启动和关闭一些 Docker 作业。但是它已经开始失败并出现错误:

$ docker-compose -f tests/docker-compose.ci-cypress.yml down --remove-orphans -v
Removing network tests_default
error while removing network: network tests_default id a9d08e07cfb56c3003d68677e93a0e5e705594fcdf112c757bded0cacb5562db has active endpoints

所以我在错误之前运行了一些调试日志:

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND             CREATED        STATUS                    PORTS     NAMES
efc422450a35   53cb2626a94e   "/bin/sh -c yarn"   11 hours ago   Exited (1) 11 hours ago             heuristic_mcclintock
2d51d2a5e5ca   a092989efdbc   "/bin/sh -c yarn"   14 hours ago   Exited (1) 14 hours ago             musing_ride
$ docker container ls -a
CONTAINER ID   IMAGE          COMMAND             CREATED        STATUS                    PORTS     NAMES
efc422450a35   53cb2626a94e   "/bin/sh -c yarn"   11 hours ago   Exited (1) 11 hours ago             heuristic_mcclintock
2d51d2a5e5ca   a092989efdbc   "/bin/sh -c yarn"   14 hours ago   Exited (1) 14 hours ago             musing_ride

这里可以看到麻烦的网络tests_default

$ docker network ls
NETWORK ID     NAME            DRIVER    SCOPE
6fb2d7bb7ce8   bridge          bridge    local
24fd6a19da38   host            host      local
dae6a7b6062c   none            null      local
a9d08e07cfb5   tests_default   bridge    local

详情:

$ docker network inspect tests_default
[
    {
        "Name": "tests_default",
        "Id": "a9d08e07cfb56c3003d68677e93a0e5e705594fcdf112c757bded0cacb5562db",
        "Created": "2021-07-22T12:29:08.752318948+03:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.31.0.0/16",
                    "Gateway": "172.31.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "tests",
            "com.docker.compose.version": "1.28.4"
        }
    }
]

当我尝试删除网络时,我收到此错误:

$ docker network remove tests_default
Error response from daemon: error while removing network: network tests_default id a9d08e07cfb56c3003d68677e93a0e5e705594fcdf112c757bded0cacb5562db has active endpoints

这是我尝试运行的实际操作,它会导致与上述相同的错误:

$ docker-compose -f tests/docker-compose.ci-cypress.yml down --remove-orphans -v
Removing network tests_default
error while removing network: network tests_default id a9d08e07cfb56c3003d68677e93a0e5e705594fcdf112c757bded0cacb5562db has active endpoints

在上述命令之前我也试过sleep 30,但没有帮助。

我也找到了这个,但问题是没有目标容器(没有运行):

docker rm -f <containerId>
docker network disconnect -f tests_default <containerName>

还有这个:

$ docker-compose -f tests/docker-compose.ci-cypress.yml rm
No stopped containers

这里是与上述相关的docker-compose.yml:

version: '2.1'

services:
  test_350:
    build: ./cypress
    command: NO_COLOR=1 yarn run cypress --env PLATFORM=X,SERVER_VERSION=${SERVER_VERSION} --reporter junit --reporter-options mochaFile=/tests/portal/reports/cypress-350-[hash].xml,toConsole=true
    ipc: host
    volumes:
      - ../cypress.json:/cypress.json
      - ../tests:/tests
    environment:
      - HTTP_PROXY=http://proxy-350-${SERVER_VERSION}:3080
  test_32:
    build: ./cypress
    command: NO_COLOR=1 yarn run cypress --env PLATFORM=Y,SERVER_VERSION=${SERVER_VERSION} --reporter junit --reporter-options mochaFile=/tests/portal/reports/cypress-32-[hash].xml,toConsole=true
    ipc: host
    volumes:
      - ../cypress.json:/cypress.json
      - ../tests:/tests
    environment:
      - HTTP_PROXY=http://proxy-32-${SERVER_VERSION}:3080
  test_dev:
    build: ./cypress
    command: NO_COLOR=1 yarn run cypress --reporter junit --reporter-options mochaFile=/tests/portal/reports/cypress-32-[hash].xml,toConsole=true
    ipc: host
    volumes:
      - ../cypress.json:/cypress.json
      - ../tests:/tests
    environment:
      - HTTP_PROXY=http://host.docker.internal:3080

在 Jenkins 中开始于:

docker-compose -f tests/docker-compose.ci-cypress.yml build

然后它会因开始出错的命令而停止:

docker-compose -f tests/docker-compose.ci-cypress.yml down --remove-orphans -v

所以问题是,我怎样才能删除那个“幽灵”网络tests_default?它似乎没有连接到任何活动的容器(并且没有一个正在运行!),但 Docker 仍然可以看到活动的端点。

【问题讨论】:

  • 删除两个停止的容器有帮助吗?你知道你是如何开始他们的吗?我怀疑如果你 docker run --net tests_default ... 一个容器,并且它仍然存在(即使它已停止),它可能会导致这个问题。
  • 我将首先重新启动 docker 引擎 (systemctl restart docker)。请注意,这将停止任何其他正在运行的容器,并且如果您设置了重启策略,它们会自动重启。
  • 在 Jenkins 上下文中无法做到这一点:Redirecting to /bin/systemctl restart docker.service; Failed to restart docker.service: Interactive authentication required.; See system logs and 'systemctl status docker.service' for details. 但也许可以在实际实例上以管理员身份尝试...
  • 删除“额外”容器没有帮助。仍然出现同样的错误,docker container ls -adocker ps -a 显示没有容器。
  • systemctl 命令用于以 root 身份在主机上运行,​​而不是从 Jenkins 内部运行。

标签: docker docker-compose docker-networking


【解决方案1】:

在更仔细地分析docker network inspect tests_default 日志时,我看到有问题的网络tests_default 是在大约1 周前创建的(我在29 日运行设置):

"Created": "2021-07-22T12:29:08.752318948+03:00",

所以正如@BMitch 所怀疑的那样,它似乎确实是一个卡住/崩溃的 Docker 进程,或者类似的东西。

在我的情况下,用一个新实例替换 Jenkins 容器实例解决了网络问题,因此旧实例中似乎有一些东西卡住了。现在可以进行标准流程了:

Removing network tests_default
Network tests_default not found.
Creating network "tests_default" with the default driver

【讨论】:

    猜你喜欢
    • 2016-02-09
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多