如何为GitLab Runner设置DNS服务器或使其使用宿主机DNS?
GitLab Runner DNS配置问题
我的.gitlab-ci.yml文件中有如下配置:
image: docker:20.10.16 # When using dind, it's wise to use the overlayfs driver for # improved performance. variables: DOCKER_TLS_CERTDIR: "/certs" DOCKER_DRIVER: overlay2 services: - docker:20.10.16-dind pages: stage: deploy before_script: - 'command -v ssh-agent >/dev/null || ( apk add --update openssh )' - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - ssh-keyscan $REPO_IPADDRESS >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts - docker info script: - docker --version - docker-compose -f docker-compose.prod.yaml up -d artifacts: paths: - public only: - main
请问如何为我的GitLab Runner设置DNS服务器,或使其使用运行它的操作系统的DNS服务器?
解决方案
方法1:修改GitLab Runner全局配置(所有任务生效)
找到Runner的配置文件config.toml(默认路径为/etc/gitlab-runner/config.toml),在[[runners]]区块的[runners.docker]下添加dns配置项,填入目标DNS服务器地址:
[[runners]] name = "你的Runner名称" url = "你的GitLab实例地址" token = "你的Runner令牌" executor = "docker" [runners.docker] tls_verify = false image = "docker:20.10.16" privileged = true volumes = ["/cache"] # 指定DNS服务器 dns = ["8.8.8.8", "8.8.4.4"] [runners.cache] [runners.cache.s3] [runners.cache.gcs]
如果要复用宿主机DNS,直接把宿主机/etc/resolv.conf里的DNS地址复制到dns数组即可。修改完成后重启Runner服务:
sudo gitlab-runner restart
方法2:在CI配置中为Dind服务指定DNS(单任务生效)
由于你使用了docker:dind服务,可以通过环境变量为Dind容器单独设置DNS,在.gitlab-ci.yml的variables区块添加DOCKER_OPTS:
variables: DOCKER_TLS_CERTDIR: "/certs" DOCKER_DRIVER: overlay2 # 为Dind服务配置DNS DOCKER_OPTS: "--dns 8.8.8.8 --dns 8.8.4.4"
这样Dind启动时会加载指定的DNS,后续通过Dind创建的容器也会继承该配置。
方法3:让Runner共享宿主机网络(直接复用宿主机DNS)
如果你的Runner使用Docker executor,可以在config.toml中设置network_mode为host,让Runner容器直接使用宿主机的网络栈,包括DNS:
[[runners]] # ...其他配置 [runners.docker] # ...其他配置 network_mode = "host"
注意:该模式会让容器与宿主机共享所有网络资源,可能引发端口冲突,需根据实际场景评估使用。
内容的提问来源于stack exchange,提问作者amin mohammadi
相关产品推荐
相关产品推荐

