Gitlab runner docker 无法解析主机
Gitlab runner docker Could not resolve host
我在 Ubuntu OS 上使用了 2 个容器:Gitlab-ce 和 gitlab-runner
容器名称是:gitlab_gitlab_1
和 gitlab_gitlab-runner_1
我通过 gitlab.localhost.com:801
访问我的 gitlab 应用程序
我用这个命令成功注册了一个跑步者:
docker exec -it gitlab_gitlab-runner_1 gitlab-runner register --non-interactive --url http://gitlab_gitlab_1 --registration-token _wgMgEx3nBocYQtoi83c --executor docker --docker-image alpine:latest
然后,当我开始工作时,我收到了这个错误信息:
Running with gitlab-runner 10.7.1 (b9bba623)
on 589a617ee407 12ba77f7
Using Docker executor with image alpine:latest ...
Pulling docker image alpine:latest ...
Using docker image sha256:3fd9065eaf02feaf94d68376da52541925650b81698c53c6824d92ff63f98353 for alpine:latest ...
Running on runner-12ba77f7-project-1-concurrent-0 via 01196621a827...
Cloning repository...
Cloning into '/builds/root/test'...
fatal: unable to access 'http://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@gitlab.localhost.com/root/test.git/': Could not resolve host: gitlab.localhost.com
ERROR: Job failed: exit code 1
在两个容器中,我都可以访问主机名 gitlab.localhost.com
。
我认为问题来自无法解析主机的图像alpine。
我该如何解决?
谢谢
编辑 1
docker-compose.yml
version: '3'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.localhost.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.localhost.com'
ports:
- '801:80'
- '443:443'
- '22:22'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
networks:
- 'default'
gitlab-runner:
image: 'gitlab/gitlab-runner:latest'
depends_on:
- 'gitlab'
restart: always
volumes:
- '/srv/gitlab-runner/config:/etc/gitlab-runner'
- '/var/run/docker.sock:/var/run/docker.sock'
networks:
- 'default'
links:
- 'gitlab:gitlab.localhost.com'
networks:
default:
driver: 'bridge'
编辑 2
docker-compose.yml
version: '3'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.localhost.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.localhost.com'
ports:
- '801:80'
- '443:443'
- '22:22'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
networks:
default:
aliases:
- 'gitlab.localhost.com'
gitlab-runner:
image: 'gitlab/gitlab-runner:latest'
depends_on:
- 'gitlab'
restart: always
volumes:
- '/srv/gitlab-runner/config:/etc/gitlab-runner'
- '/var/run/docker.sock:/var/run/docker.sock'
networks:
- 'default'
networks:
default:
driver: 'bridge'
正如我所见,您已经定义了一个网络,这意味着 gitlab
和 gitlab-runner
都在同一个网络中。您可以使用 docker inspect
来验证这一点。所以你需要删除 links
因为你不需要它。
为了设置网络别名,您需要将 gitlab
服务的网络部分更改为以下内容:
gitlab:
...
networks:
default:
aliases:
- gitlab.localhost.com
参考文献:
感谢 Tarun Lalwan link 并根据 Joyce Babu post,gitlab runner 回购中有一个 undocumented option
[runners.docker] section
network_mode : Add container to a custom network
所以我必须在 config.toml
中使用我的网络名称设置此选项,例如
[[runners]]
...
[runners.docker]
...
network_mode = "gitlab_default"
或者从命令行创建运行器时
docker exec -it gitlab_gitlab-runner_1 gitlab-runner register \
--non-interactive \
--url http://gitlab_gitlab_1 \
--registration-token _wgMgEx3nBocYQtoi83c \
--executor docker \
--docker-image alpine:latest \
--docker-network-mode gitlab_default
万一这有助于其他人寻找这个..
同样的问题,但 GitLab 和 GitLab Runner 运行 在局域网中的不同机器上。 DNS 正常工作并且 ping gitlab
正常工作,但 dockers:
内部除外
重现问题:
$ sudo docker run -it alpine ping gitlab
ping: bad address 'gitlab'
^C
但适用于给定的 DNS:
$ sudo docker run -it --dns=172.168.0.1 alpine ping gitlab
PING gitlab (172.168.0.5): 56 data bytes
64 bytes from 172.168.0.5: seq=0 ttl=63 time=0.536 ms
^C
为 docker 配置实际的 LAN DNS。
在 GitLab Runner(文件尚不存在)上编辑 /etc/docker/daemon.json
,内容为:
{
"dns": ["172.168.0.1", "1.1.1.1"]
}
再次测试,OK:
$ sudo docker run -it --dns=172.168.0.1 alpine ping gitlab
PING gitlab (172.168.0.5): 56 data bytes
64 bytes from 172.168.0.5: seq=0 ttl=63 time=0.455 ms
64 bytes from 172.168.0.5: seq=1 ttl=63 time=0.905 ms
^C
如果这不是应该的方式,我很乐意听到。
如果这个问题一开始就不应该存在,我也很乐意听到。我很惊讶在网上找不到很多关于 GitLab Runner 的这个问题的参考资料..
我知道这个帖子很旧,但我看到到处都是指向这个帖子的帖子,
但没有为我解决。
我收到了同样的错误信息:
严重:无法访问 'http://gitlab.maison.fr:82/angular/test1.git/':无法解析主机:gitlab.maison.fr
在config.toml中添加network_mode = "host"解决问题
我的 config.toml 在我的本地私人网络上:
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "mars"
url = "http://gitlab.maison.fr:82/"
token = "TCfHAheTUdWMU2-fFNxK"
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "gitlab/gitlab-runner:latest"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
network_mode = "host"
这几天遇到了这个问题,在尝试了各种线程的所有建议解决方案后,我通过以下方式解决了它:
pkill docker
iptables -t nat -F
ifconfig docker0 down
service docker restart
感谢My docker container has no internet
这对我有用,没有在 docker compose 中定义网络。只需在 gitlab-runner 配置中添加一条 extra_hosts 记录,就像我们在其他 OS.
中添加一条记录一样
sudo vim /etc/gitlab-runner/config.toml
[runners.docker]
tls_verify = false
image = "alpine:latest"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
extra_hosts = ["xxx.xxx.com.cn:192.168.10.110"]
https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnersdocker-section
在网络方面,容器就像一个独立的服务器,拥有自己的 IP 地址、网络路由和 DNS 解析。唯一的例外是 运行 主机网络上的容器。
就是说,您可能需要弄清楚主机的 DNS 解析是如何工作的(也许您在 /etc/hosts 中添加了一些东西?)然后在容器内执行相同的操作。
或在主机网络上使用例外和运行。
我在 Ubuntu OS 上使用了 2 个容器:Gitlab-ce 和 gitlab-runner
容器名称是:gitlab_gitlab_1
和 gitlab_gitlab-runner_1
我通过 gitlab.localhost.com:801
我用这个命令成功注册了一个跑步者:
docker exec -it gitlab_gitlab-runner_1 gitlab-runner register --non-interactive --url http://gitlab_gitlab_1 --registration-token _wgMgEx3nBocYQtoi83c --executor docker --docker-image alpine:latest
然后,当我开始工作时,我收到了这个错误信息:
Running with gitlab-runner 10.7.1 (b9bba623)
on 589a617ee407 12ba77f7
Using Docker executor with image alpine:latest ...
Pulling docker image alpine:latest ...
Using docker image sha256:3fd9065eaf02feaf94d68376da52541925650b81698c53c6824d92ff63f98353 for alpine:latest ...
Running on runner-12ba77f7-project-1-concurrent-0 via 01196621a827...
Cloning repository...
Cloning into '/builds/root/test'...
fatal: unable to access 'http://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@gitlab.localhost.com/root/test.git/': Could not resolve host: gitlab.localhost.com
ERROR: Job failed: exit code 1
在两个容器中,我都可以访问主机名 gitlab.localhost.com
。
我认为问题来自无法解析主机的图像alpine。
我该如何解决?
谢谢
编辑 1
docker-compose.yml
version: '3'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.localhost.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.localhost.com'
ports:
- '801:80'
- '443:443'
- '22:22'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
networks:
- 'default'
gitlab-runner:
image: 'gitlab/gitlab-runner:latest'
depends_on:
- 'gitlab'
restart: always
volumes:
- '/srv/gitlab-runner/config:/etc/gitlab-runner'
- '/var/run/docker.sock:/var/run/docker.sock'
networks:
- 'default'
links:
- 'gitlab:gitlab.localhost.com'
networks:
default:
driver: 'bridge'
编辑 2
docker-compose.yml
version: '3'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.localhost.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.localhost.com'
ports:
- '801:80'
- '443:443'
- '22:22'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
networks:
default:
aliases:
- 'gitlab.localhost.com'
gitlab-runner:
image: 'gitlab/gitlab-runner:latest'
depends_on:
- 'gitlab'
restart: always
volumes:
- '/srv/gitlab-runner/config:/etc/gitlab-runner'
- '/var/run/docker.sock:/var/run/docker.sock'
networks:
- 'default'
networks:
default:
driver: 'bridge'
正如我所见,您已经定义了一个网络,这意味着 gitlab
和 gitlab-runner
都在同一个网络中。您可以使用 docker inspect
来验证这一点。所以你需要删除 links
因为你不需要它。
为了设置网络别名,您需要将 gitlab
服务的网络部分更改为以下内容:
gitlab:
...
networks:
default:
aliases:
- gitlab.localhost.com
参考文献:
感谢 Tarun Lalwan link 并根据 Joyce Babu post,gitlab runner 回购中有一个 undocumented option
[runners.docker] section
network_mode : Add container to a custom network
所以我必须在 config.toml
中使用我的网络名称设置此选项,例如
[[runners]]
...
[runners.docker]
...
network_mode = "gitlab_default"
或者从命令行创建运行器时
docker exec -it gitlab_gitlab-runner_1 gitlab-runner register \
--non-interactive \
--url http://gitlab_gitlab_1 \
--registration-token _wgMgEx3nBocYQtoi83c \
--executor docker \
--docker-image alpine:latest \
--docker-network-mode gitlab_default
万一这有助于其他人寻找这个..
同样的问题,但 GitLab 和 GitLab Runner 运行 在局域网中的不同机器上。 DNS 正常工作并且 ping gitlab
正常工作,但 dockers:
重现问题:
$ sudo docker run -it alpine ping gitlab
ping: bad address 'gitlab'
^C
但适用于给定的 DNS:
$ sudo docker run -it --dns=172.168.0.1 alpine ping gitlab
PING gitlab (172.168.0.5): 56 data bytes
64 bytes from 172.168.0.5: seq=0 ttl=63 time=0.536 ms
^C
为 docker 配置实际的 LAN DNS。
在 GitLab Runner(文件尚不存在)上编辑 /etc/docker/daemon.json
,内容为:
{
"dns": ["172.168.0.1", "1.1.1.1"]
}
再次测试,OK:
$ sudo docker run -it --dns=172.168.0.1 alpine ping gitlab
PING gitlab (172.168.0.5): 56 data bytes
64 bytes from 172.168.0.5: seq=0 ttl=63 time=0.455 ms
64 bytes from 172.168.0.5: seq=1 ttl=63 time=0.905 ms
^C
如果这不是应该的方式,我很乐意听到。
如果这个问题一开始就不应该存在,我也很乐意听到。我很惊讶在网上找不到很多关于 GitLab Runner 的这个问题的参考资料..
我知道这个帖子很旧,但我看到到处都是指向这个帖子的帖子, 但没有为我解决。
我收到了同样的错误信息:
严重:无法访问 'http://gitlab.maison.fr:82/angular/test1.git/':无法解析主机:gitlab.maison.fr
在config.toml中添加network_mode = "host"解决问题
我的 config.toml 在我的本地私人网络上:
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "mars"
url = "http://gitlab.maison.fr:82/"
token = "TCfHAheTUdWMU2-fFNxK"
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "gitlab/gitlab-runner:latest"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
network_mode = "host"
这几天遇到了这个问题,在尝试了各种线程的所有建议解决方案后,我通过以下方式解决了它:
pkill docker
iptables -t nat -F
ifconfig docker0 down
service docker restart
感谢My docker container has no internet
这对我有用,没有在 docker compose 中定义网络。只需在 gitlab-runner 配置中添加一条 extra_hosts 记录,就像我们在其他 OS.
中添加一条记录一样sudo vim /etc/gitlab-runner/config.toml
[runners.docker]
tls_verify = false
image = "alpine:latest"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
extra_hosts = ["xxx.xxx.com.cn:192.168.10.110"]
https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnersdocker-section
在网络方面,容器就像一个独立的服务器,拥有自己的 IP 地址、网络路由和 DNS 解析。唯一的例外是 运行 主机网络上的容器。
就是说,您可能需要弄清楚主机的 DNS 解析是如何工作的(也许您在 /etc/hosts 中添加了一些东西?)然后在容器内执行相同的操作。
或在主机网络上使用例外和运行。