【发布时间】: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 -a和docker ps -a显示没有容器。 -
systemctl命令用于以 root 身份在主机上运行,而不是从 Jenkins 内部运行。
标签: docker docker-compose docker-networking