docker-compose - Gogs + 无人机 getsockopt : connection refused

标签 docker-compose drone.io gogs

在 Gogs/webhooks 界面中,当我单击测试交付按钮时,出现此错误;

送货方式:邮寄http://localhost:8000/hook?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZXh0IjoidG9tL2Ryb255IiwidHlwZSI6Imhvb2sifQ.UZdOVW2IdiDcLQzKcnlmlAxkuA8GTZBH634G0K7rggI : 拨号 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

最佳答案

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

这里的问题是 Gogs 和 Drone 在不同网络上的不同容器中运行。这意味着当 Gogs 尝试将钩子(Hook)发送到无人机时,它会将其发送到 localhost:8000 并失败,因为无人机位于单独的桥上。

建议修复

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

对于本地测试,您还可以使用 Docker 分配的本地 IP 地址。您可以使用 Docker 检查找到您的 Drone 和 Gogs IP 地址:

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

为什么不自定义主机名?

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

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

关于docker-compose - Gogs + 无人机 getsockopt : connection refused,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38911678/

相关文章:

docker - 如何在运行 docker-compose up 时运行多个 docker 容器(gitlab-ci)

docker - Docker:输出显示在http://192.168.99.100:8000/而不是http://0.0.0.0:8000/

docker - 无法在无人机 docker build : Error parsing reference: ":latest" is not a valid repository/tag: invalid reference format 上标记图像

ios - 如何拦截智能 RTH 请求并取消它?

bash - Dartanalyzer-排除部分库

mysql - Docker gogs 连接被 mysql 容器拒绝

docker - 具有撰写文件的docker swarm无法识别 “links”

docker - 自动崩溃时重启 Docker 容器

gogs - 哪个用户与部署 key 一起使用?

推送时缺少 git 子文件夹