【问题标题】:How to get two Docker containers talking to each other?如何让两个 Docker 容器相互通信?
【发布时间】:2017-12-04 16:27:45
【问题描述】:

我有两个 Docker 容器正在运行。一个是 MongoDB,一个是运行简单的 REST API 的容器,应该能够查询 MongoDB 容器。

端口映射

  • 0.0.0.0:28001->27017/tcp (mongodb)
  • 0.0.0.0:3000->3000/tcp (restapi)

用于 MongoDB 映像的命令

docker run -p 28001:27017 -v /home/ubuntu/docker/mongodb/mongod.conf:/etc/mongod.conf --name mongodb_container -d mongodb_image

我重写了 mongo.conf 添加 0.0.0.0 来绑定 IP

net:
  port: 27017
  bindIp: [127.0.0.1,0.0.0.0]

用于 API 的运行命令:

docker container run -it -v /home/ubuntu/docker/node_modules:/usr/lib/node_modules -p 3000:3000 --name rest_container rest_image /bin/bash

我可以查询其余的 api,但它挂起并超时(从不返回结果)。其余配置文件如下所示:

{ "db": {
  'port': 28001,
  'host': "192.168.123.191"
  },
  'server': {
    'port': 3000,
        'timeout': 120,
    'address': "0.0.0.0"
  },
  'flavor': "regular",
  'debug': true
};

rest api 容器的内部 IP:

172.17.0.4

mongodb容器的内部IP:

172.17.0.2

我知道 API 可以正常工作,因为我无需在 docker 上运行程序就可以进行查询。端口 27017 和 3000 都暴露在 Dockerfile 中。在 mongodb 容器中,我还可以看到每次执行查询时连接数都会增加。

【问题讨论】:

  • 你使用哪个IP从容器中查询?
  • 看看docker-compose,我想这就是你所需要的。
  • @ChrisStryczynski 192.168.123.191:28001
  • 你从哪里得到这个 IP?
  • @ChrisStryczynski 这是主机的 IP。如果我尝试使用容器内部 IP 连接失败。

标签: mongodb rest docker


【解决方案1】:

在 docker 1.9 之前,您必须使用“链接”,但它已被弃用。现在您应该创建一个“自定义网络”https://docs.docker.com/engine/userguide/networking) 并在此网络中运行您的容器。

例如:

docker network create --driver bridge my_network

docker run  --network=my_network -p 28001:27017 -v /home/ubuntu/docker/mongodb/mongod.conf:/etc/mongod.conf --name mongodb_container -d mongodb_image

docker container run  --network=my_network -it -v /home/ubuntu/docker/node_modules:/usr/lib/node_modules -p 3000:3000 --name rest_container rest_image /bin/bash

您需要配置 Node 以使用主机名(与容器名称相同)和 Mongo 容器的端口而不是外部容器的端口与 Mongo 通信,我的意思是端口 27017 而不是 28001。这就是为什么端口绑定-p 28001: 27017 是不必要的,除非您想从外部访问它。

{ "db": {
  'port': 27017,
  'host': "mongodb_container"
  },
  'server': {
    'port': 3000,
    'timeout': 120,
    'address': "0.0.0.0"
  },
  'flavor': "regular",
  'debug': true
};

【讨论】:

  • 感谢您的回复。您的回答有效,但问题是我必须降级容器中的节点版本才能使 API 正常工作。
猜你喜欢
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 2020-06-10
  • 2021-08-09
  • 1970-01-01
相关资源
最近更新 更多