我使用下面的docker-compose.yml来运行一个带有一个运行器的停靠的GitLab实例。两者都在同一个网络中。(网桥名称是显式设置的,因为防火墙规则依赖于它。)
version: '3.9'
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: 'unless-stopped'
hostname: 'gitlab.example.com'
ports:
- '8080:80'
- '8022:22'
environment:
[...]
volumes:
[...]
runner:
image: 'gitlab/gitlab-runner:alpine'
restart: 'unless-stopped'
hostname: 'gitlab-runner.example.com'
depends_on:
- 'web'
environment:
[...]
volumes:
[...]
networks:
default:
driver: 'bridge'
ipam:
driver: 'default'
config:
- subnet: '172.16.1.0/24'
driver_opts:
com.docker.network.bridge.name: 'br-gitlab'
这在Docker19.03.15上运行良好,但在升级到20.10.5之后,runner
不能再连接到web
。在runner
内的Bash中手动执行相同的操作会呈现相同的“连接被拒绝”:
$ curl https://gitlab.example.com/user/repo.git/
Connecting to gitlab.example.com (172.16.1.2:443)
wget: can't connect to remote host (172.16.1.2): Connection refused
在runner
容器中有网络,我可以访问其他站点,也可以解析域名。显然,这与iptables (在主机上)无关,关闭这些防火墙后问题仍然存在。
我已经检查了Docker的更改日志,但没有看到任何可以解释这一点的更改。你知道我在这没看到什么吗?
谢谢!
发布于 2021-05-11 14:45:18
弄清楚了:
我的设置使runner
从gitlab.example.com:443获取源代码,这是主机上的Nginx代理所服务的端口。这在Docker19上起作用了,然而,从Docker20开始,runner
容器不能再通过主机连接。这完全没问题,解决方案是:告诉runner
在克隆源时直接用web
联系GitLab服务器。config.toml
中的每个runner都必须包含:
url = "http://172.16.1.2:8080/"
clone_url = "http://172.16.1.2:8080/" # <- this one was missing
https://stackoverflow.com/questions/67483235
复制相似问题