问题描述
在GitLab CI中遇到了一个问题,他想在共享Runner上构建镜像,并将其推送到GitLab仓库中。然后,他希望在自己的服务器上使用Shell Executor拉取该镜像,并执行部署操作。然而,在使用Shell Executor时,当他尝试运行Docker命令时,出现了错误:
$ docker infoerror during connect: Get http://docker:2375/v1.37/info: dial tcp: lookup docker on 172.31.0.2:53: no such host
他提供了他的gitlab-ci.yml
文件,其中定义了构建和部署阶段的步骤。用户已经尝试过在没有构建阶段的情况下运行,并且在DOCKER_HOST
变量和docker:dind
服务的情况下运行时正常工作。
解决方案
请注意以下操作可能涉及到GitLab CI和Docker的配置。确保在操作之前备份关键文件。
在这个情况下,问题出现在Shell Executor尝试与Docker主机通信时的主机名解析上。解决此问题的一种方法是配置Shell Executor以正确连接到Docker引擎。以下是解决方案的步骤:
步骤1:修改GitLab Runner配置
- 登录到您的GitLab服务器或相应的服务器。
- 找到用于Shell Executor的GitLab Runner配置文件,通常位于
/etc/gitlab-runner/config.toml
。 - 打开配置文件,并查找与您的Shell Executor相关的部分。
- 添加或修改
extra_hosts
选项,将Docker主机的IP地址和主机名添加为映射。这将解决Shell Executor在与Docker引擎通信时的主机名解析问题。示例如下:
toml
[[runners]]
name = "My Shell Executor Runner"
url = "https://gitlab.com/"
token = "YOUR_RUNNER_TOKEN"
executor = "shell"
[runners.custom_build_dir]
[runners.docker]
image = "docker:stable"
privileged = false
disable_cache = false
extra_hosts = ["docker:<Docker_Host_IP>"]
请将<Docker_Host_IP>
替换为您实际的Docker主机IP地址。
步骤2:修改gitlab-ci.yml文件
在您的gitlab-ci.yml
文件中,您需要确保在部署阶段的script
中使用正确的Docker引擎地址,而不是tcp://docker:2375
。以下是如何修改deploy
阶段的示例:
deploy:
stage: deploy
script:
- docker -H tcp://<Docker_Host_IP>:2375 pull $CONTAINER_IMAGE:latest || true
tags:
- deploy
- shell
请将<Docker_Host_IP>
替换为您实际的Docker主机IP地址。
步骤3:保存更改并重新启动GitLab Runner
完成上述更改后,保存配置文件并重新启动GitLab Runner,使配置生效。
通过以上步骤,您应该能够解决Shell Executor与Docker主机通信的问题,并成功在GitLab CI中使用共享Runner进行构建并在服务器上使用Shell Executor进行部署。
请注意,根据您的环境和配置,可能需要进一步调整和测试。确保在操作之前备份关键文件以及在生产环境中进行适当的测试。
【参考链接】:
– GitLab Runner配置文档
– Docker引擎连接选项