Docker修改的节点容器未在docker swarm overlay网络中连接或查看mongo db容器

问题描述 投票:0回答:1

我有一个docker swarm服务,它使用mongodb,mongo-express和自定义节点映像。我创建了一个简单的docker yaml文件来一起启动它们。

version: '3.1'

services:
  mongo:
    image: mongo:4.0.6-xenial
    environment:
      MONGO_INITDB_ROOT_USERNAME:
      MONGO_INITDB_ROOT_PASSWORD:

  mongo-express:
    image: mongo-express
    environment:
      MONGO_INITDB_ROOT_USERNAME:
      MONGO_INITDB_ROOT_PASSWORD:
    ports:
    - "8081:8081"

  backend:
    image: backend
    ports:
     - "2222:2222"

现在我知道docker swarm会自动在所有节点之间创建一个默认的覆盖网络。我的docker inspect network显示网络中的所有容器。我可以看到后端使用localhost:2222和mongo-express使用localhost:8081连接。

我的问题是后端没有连接,甚至也看不到mongo数据库。我尝试ssh进入mongo-express容器,成功ping通localhost:27017,然后成功ping通localhost:2222。

但是,尝试从后端容器ping / curl mongo-express或mongodb什么都不用,就像端口甚至看不见一样。 (localhost:2222有效,但localhost:8081或localhost:27017不可用)。

编辑:我从docker inspect network复制mongo的ip地址后再次进入后端容器,然后能够成功卷曲10.0.5.8:27017。为什么不在localhost上?

node.js mongodb docker docker-swarm docker-networking
1个回答
1
投票

每个容器都有自己的IP地址。这意味着在docker容器中,localhost指的是它自己。这就是为什么你不能期望使用localhost从mongo-express容器到达mongo容器IP地址。

Docker compose和swarm为我们提供了一种方便的方法来按照docker-compose.yml文件中定义的服务名称来处理容器。

所以从mongo-express容器,使用mongo:27017连接到mongo。

© www.soinside.com 2019 - 2024. All rights reserved.