某些集装箱拒绝集装箱之间的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)

但是,container
web应用程序
无法连接到
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
检查主机。