Docker修改后的节点容器未连接或在docker swarm覆盖网络中看到mongo db容器

时间:2019-03-06 08:30:38

标签: node.js mongodb docker docker-swarm docker-networking

我有一个使用mongodb,mongo-express和自定义节点映像的docker swarm服务。我创建了一个简单的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网络显示了网络中的所有容器。 我可以看到使用localhost:2222连接的后端和使用localhost:8081的mongo-express。

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

但是,尝试从后端容器ping / curl mongo-express或mongodb没有任何作用,就像端口arent甚至可见。 (localhost:2222有效,但localhost:8081或localhost:27017无效)。

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

1 个答案:

答案 0 :(得分:1)

每个容器都有其自己的IP地址。这意味着在docker容器中,localhost指向自身。这就是为什么您不能期望使用localhost从mongo-express容器访问mongo容器IP地址的原因。

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

因此,从 mongo-express 容器中,使用mongo:27017连接到mongo。