【问题标题】:Docker modified node container not connecting or seeing mongo db container within docker swarm overlay networkDocker 修改节点容器未连接或在 docker swarm 覆盖网络中看到 mongo db 容器
【发布时间】:2019-07-27 20:30:31
【问题描述】:

我有一个使用 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 没有任何作用,就像端口甚至不可见一样。 (localhost:2222 有效,但 localhost:8081 或 localhost:27017 无效)。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多