Docker compose Gogs&x2B;无人机getsockopt:连接被拒绝
在Gogs/webhooks界面中,当我点击测试交付按钮时,我得到了这个错误 传递:Post:拨号tcp[::1]:8000:getsockopt:连接被拒绝 这是我的docker-compose.yml文件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
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地址,无法通过环回地址进行通信。