docker - 在 Gitlab CI 构建中使用 Docker 调用 tcp i/o 超时

标签 docker gitlab docker-registry gitlab-ci gitlab-ci-runner

几天以来我有一个我无法理解的问题,暂且不解决。

我正在设置一个私有(private) Gitlab + Gitlab CI + Gitlab Docker 注册表环境来托管和测试我的代码,并在运行器中从中构建 docker 镜像。

我正在尝试使用 docker:dind 图像在 Gitlab 运行器中构建 Docker 图像。我有以下错误:

gitlab-ci-multi-runner 1.3.2 (0323456)
Using Docker executor with image docker:latest ...
Pulling docker image docker:dind ...
Starting service docker:dind ...
Waiting for services to be up and running...
Pulling docker image docker:latest ...
Running on runner-c682f650-project-23-concurrent-0 via 4b1582b2cffb...
Fetching changes...
HEAD is now at 7f10ed4 Finalize Docker and Gitlab CI workflow
Checking out 7f10ed4c as gitlab-ci-docker...
$ docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.ademis.com:5005
Error response from daemon: Get https://registry.ademis.com:5005/v1/users/: dial tcp 46.105.98.95:5005: i/o timeout

我尝试了各种方法,包括:
- 对任何 IP 的 ping 正常工作
- 端口已打开(当我尝试在端口 5005 上登录另一个注册表时,它可以工作)
- 从我的本地机器登录正常工作

我的架构是服务器上的完整 Docker。我有三个主要容器(我还有其他容器,但与此问题无关):
jwilder/nginx-proxy            devserver_front_1
    0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp

gitlab/gitlab-ce:latest        devserver_gitlab_1
    80/tcp, 0.0.0.0:22->22/tcp, 0.0.0.0:5000->5000/tcp, 0.0.0.0:5005->5005/tcp, 443/tcp

gitlab/gitlab-runner:latest    devserver_runner_1

对 Gitlab(端口 80)的 HTTP 访问通过 jwilder/nginx-proxy,但 Git 访问和 Docker 注册表访问是直接的。

当我启动构建时,我使用 Docker 执行器,因此构建了一个 Docker 容器:
8ae8af78bc1b                   runner-c682f650-project-23-concurrent-0-cache-b36a40d3c05f7c6ff01d711a44f0d239

我的问题似乎在那个容器内。但是,我想到的通常的嫌疑人(网络和 DNS)与其他 IP/域配合得很好,所以我对这个问题没有任何线索。

任何的想法?

最佳答案

我想这里你的注册表运行在同一个 Docker 主机上,所以我的猜测是从主机到公共(public) IP 上的主机本身的通信被破坏了,可能是因为错误的 iptables 规则或类似的东西。

关于docker - 在 Gitlab CI 构建中使用 Docker 调用 tcp i/o 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38140636/

相关文章:

docker - 从 docker 注册表中删除整个项目?

Docker 容器无法定位 Zip 包?

syntax - 如何检查 YML 语法是否正确(gitlab.yml)

django - Nginx 和 uwsgi 连接在放置在单独的 docker 容器中时被拒绝

docker - 在 CI 中使用来自 gitlab Registry 的图像

Gitlab 工件和未跟踪

docker - 部署时如何启动新建的Docker镜像?

docker - Docker注册表仪表板

docker - 无法使用Docker容器连接到Oracle数据库

docker - 如何在Docker中 “inherit”启动进程?