问题描述
在设置Drone时遇到了问题。在运行构建时,克隆步骤失败。用户怀疑这是一个DNS问题,并认为可能是配置了错误的Runner。然而,他无法解决这个问题。
以下是用户的docker-compose文件(已删除部分信息):
drone:
image: drone/drone:2.0.4
container_name: drone
hostname: drone
restart: unless-stopped
depends_on:
- postgres
environment:
- DRONE_GITHUB_SERVER=https://github.com
- DRONE_GITHUB_CLIENT_ID=
- DRONE_GITHUB_CLIENT_SECRET=
- DRONE_RPC_SECRET=
- DRONE_SERVER_HOST=
- DRONE_SERVER_PROTO=https
- DRONE_DATABASE_DRIVER=postgres
- DRONE_DATABASE_DATASOURCE=postgres://@postgres:5432/drone?sslmode=disable
networks:
- traefik-network
volumes:
- drone-data:/data
drone-runner-1:
image: drone/drone-runner-docker:1.6.3
container_name: drone-runner-1
hostname: drone-runner-1
restart: unless-stopped
environment:
- DRONE_RPC_HOST=
- DRONE_RPC_PROTO=https
- DRONE_RPC_SECRET=
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NAME=${HOSTNAME}
- DRONE_RUNNER_NETWORKS=traefik
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:rw"
networks:
traefik-network:
external: true
name: traefik
用户确认可以从traefik网络中ping通github.com,所以这不应该是问题,对吗?但是,当用户尝试从Runner容器中ping github时,输出如下:
root@Ubuntu-2004-focal-64-minimal ~ # docker exec -it drone-runner-1 nslookup github.com
Server: 127.0.0.11
Address: 127.0.0.11:53
Non-authoritative answer:
*** Can't find github.com: No answer
Non-authoritative answer:
Name: github.com
Address: 140.82.121.3
此外,以下是克隆步骤的输出:
Initialized empty Git repository in /drone/src/.git/
+ git fetch origin +refs/heads/master:
fatal: unable to access 'https://github.com/[REPO]': Could not resolve host: github.com
解决方案
请注意以下操作可能涉及版本差异或可能的风险。
方案1
问题可能出现在创建的Docker网络中。由于主机能够ping通GitHub,说明问题可能在Docker网络中。你可以使用tcpdump
命令在Docker桥上跟踪网络阻塞情况。
尝试以下步骤来解决问题:
- 使用以下命令在Docker桥上运行
tcpdump
以捕获网络数据包:
bash
sudo tcpdump -i docker0 -n -vvv -s 0 -w /tmp/docker_traffic.pcap - 在另一个终端窗口中,启动一个新的构建,并在Runner容器中尝试克隆项目。
- 结束
tcpdump
进程并分析捕获的数据包以查找任何网络问题。
方案2
尝试以下操作作为临时解决方案,这可能需要特权设置。
- 在
docker-compose.yaml
文件中,将privileged: true
添加到drone
和drone-runner-1
服务的配置中,以便让容器能够访问主机的DNS解析。
“`yaml
drone:
image: drone/drone:2.0.4
privileged: true
# … 其他配置 …
drone-runner-1:
image: drone/drone-runner-docker:1.6.3
privileged: true
# … 其他配置 …
“`
2. 重新启动服务以使更改生效。
请注意,这些解决方案可能不适用于所有情况,根据你的环境和具体问题,可能需要进一步调查和测试。如果问题仍然存在,请参考Drone的文档或社区寻求更多帮助。
正文完