解决Drone无法克隆GitHub项目的问题

114次阅读
没有评论

问题描述

在设置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桥上跟踪网络阻塞情况。
尝试以下步骤来解决问题:

  1. 使用以下命令在Docker桥上运行tcpdump以捕获网络数据包:
    bash
    sudo tcpdump -i docker0 -n -vvv -s 0 -w /tmp/docker_traffic.pcap
  2. 在另一个终端窗口中,启动一个新的构建,并在Runner容器中尝试克隆项目。
  3. 结束tcpdump进程并分析捕获的数据包以查找任何网络问题。

方案2

尝试以下操作作为临时解决方案,这可能需要特权设置。

  1. docker-compose.yaml文件中,将privileged: true添加到dronedrone-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的文档或社区寻求更多帮助。

正文完