docker compose - Gogs + Drone getsockopt:连接拒绝



在Gogs/webhooks界面中,当我点击测试交付按钮时,我得到了这个错误;

Delivery: Post http://localhost:8000/hook?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZXh0IjoidG9tL2Ryb255IiwidHlwZSI6Imhvb2sifQ.UZdOVW2IdiDcLQzKcnlmlAxkuA8GTZBH634G0K7rggI: dial tcp [::1]:8000: getsockopt: connection refused

这是我的docker-compose。yml文件

version: '2'
services:
  gogs:
    image: gogs/gogs
    ports:
      - 3000:3000
      - 22:22
    links:
      - mysql
  mysql:
    image: mysql
    expose:
      - 3306
    environment:
      - MYSQL_ROOT_PASSWORD=1234
      - MYSQL_DATABASE=gogs
  drone:
    image: drone/drone
    links:
     - gogs
    ports:
      - 8000:8000
    volumes:
      - ./drone:/var/lib/drone 
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - REMOTE_DRIVER=gogs
      - REMOTE_CONFIG=http://gogs:3000?open=true
      # - PUBLIC_MODE=true

根本原因是Drone假设它的外部地址是localhost:8000,因为这就是从浏览器访问它的方式。因此,Drone将所有Gogs的webhook配置为使用localhost:8000/hook作为回调URL。

这里的问题是Gogs和Drone在不同的网络上运行在不同的容器中。这意味着当Gogs试图将钩子发送到drone时,它将其发送到localhost:8000并失败,因为drone在单独的桥上。

建议修复

建议的修复是使用DNS或IP地址与Drone和Gogs。如果您正在运行任何一个系统的生产安装,则不太可能使用本地主机,因此这似乎是合理的解决方案。

对于本地测试,你也可以使用Docker分配的本地IP地址。你可以使用Docker inspect找到你的Drone和Gogs的IP地址:

"Networks": {
  "default": {
    "IPAddress": "172.18.0.3"
  }
}

为什么不自定义主机名?

使用自定义主机名,如http://gogs,是有问题的,因为drone使用默认的Docker网络设置为每次构建创建临时的Docker容器。这意味着您的构建环境将使用自己的隔离网络,并且无法解析http://gogs

因此,即使我们配置Drone和Gogs使用自定义主机名进行通信,构建环境将无法解析Gogs主机名来克隆您的存储库。

相关内容

  • 没有找到相关文章

最新更新