Docker compose Gogs&x2B;无人机getsockopt:连接被拒绝

Docker compose Gogs&x2B;无人机getsockopt:连接被拒绝,docker-compose,drone,gogs,drone.io,Docker Compose,Drone,Gogs,Drone.io,在Gogs/webhooks界面中,当我点击测试交付按钮时,我得到了这个错误 传递:Post:拨号tcp[::1]:8000:getsockopt:连接被拒绝 这是我的docker-compose.yml文件 version: '2' services: gogs: image: gogs/gogs ports: - 3000:3000 - 22:22 links: - mysql mysql: image: mysq

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

传递:Post:拨号tcp[::1]:8000:getsockopt:连接被拒绝

这是我的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

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

这里的问题是,GOG和无人机在不同网络上的不同容器中运行。这意味着,当Gogs试图将钩子发送到无人机时,它会将钩子发送到
localhost:8000
,但由于无人机位于单独的网桥上而失败

建议的修复程序

建议的修复方法是将DNS或IP地址用于无人机和GOG。如果您正在运行这两个系统的生产安装,则不太可能使用localhost,因此这似乎是合理的解决方案

对于本地测试,您还可以使用Docker分配的本地IP地址。您可以使用Docker inspect查找您的无人机和Gogs IP地址:

"Networks": {
  "default": {
    "IPAddress": "172.18.0.3"
  }
}
为什么不自定义主机名?

使用自定义主机名(例如)是有问题的,因为drone使用默认Docker网络设置为每个构建创建短暂的Docker容器。这意味着您的生成环境将使用其自己的隔离网络,并且将无法解析


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

如果您需要更多信息,请让我知道Thankst这表示compose创建了单网络。docker compose为代理和服务器创建了共享网桥网络,但是,代理和服务器容器都分配了自己的IP地址,无法通过环回地址进行通信。