某些集装箱拒绝集装箱之间的Docker Swarm连接
简化群:某些集装箱拒绝集装箱之间的Docker Swarm连接,docker,docker-machine,docker-swarm,Docker,Docker Machine,Docker Swarm,简化群: manager1 node - consul-agent worker1 node - consul-client1 - web-app:80 - web-network:9000 database1 node - consul-client2 - redis:6379 - mongo:27017 webapp和webnetwork服务可以通过其服务名称正确连接到redis和mongo,例如redis.createClien
manager1 node
- consul-agent
worker1 node
- consul-client1
- web-app:80
- web-network:9000
database1 node
- consul-client2
- redis:6379
- mongo:27017
webapp
和webnetwork
服务可以通过其服务名称正确连接到redis
和mongo
,例如redis.createClient('6379','redis')
和mongoose.connect('mongodb://mongo)
但是,containerweb应用程序
无法连接到web网络
,我正在尝试这样做:
request('http://web-network:9000')
但是得到错误:
errorno: ECONNREFUSED
address: 10.0.1.9
port: 9000
使用专用IP请求web网络
确实有效:
request('http://11.22.33.44:9000')
我错过了什么?为什么它们可以连接到redis
和mongo
,但不能连接到每个容器之间?当将redis
/mongo
移动到与web app
相同的节点时,它仍然可以工作,因此我认为问题不会出现,因为服务无法与同一服务器节点上的服务进行通信
我们可以让docker网络使用专用IP而不是预先配置的子网吗
docker堆栈部署文件
version: '3'
services:
web-app:
image: private-repo/private-image
networks:
- swarm-network
ports:
- "80:8080"
deploy:
placement:
constraints:
- node.role==worker
web-network:
image: private-repo/private-image2
networks:
- swarm-network
ports:
- "9000:8080"
deploy:
placement:
constraints:
- node.role==worker
redis:
image: redis:latest
networks:
- swarm-network
ports:
- "6739:6739"
deploy:
placement:
constraints:
- engine.labels.purpose==database
mongo:
image: mongo:latest
networks:
- swarm-network
ports:
- "27017:27017"
deploy:
placement:
constraints:
- engine.labels.purpose==database
networks:
swarm-network:
driver: overlay
docker stack deploy app-c docker compose.yml
我们遇到了与此类似的问题。结果表明,我们的应用程序在生产中监听不同的端口:/Tested通过连接到每个容器并使用curl
检查主机。