在两个docker容器之间进行通信

时间:2017-09-24 09:16:46

标签: docker

我是关于docker的新手,我需要你帮忙解决容器之间的沟通问题。

我有两个容器 容器1:它是一个网站,在端口80上运行 容器2:它是上述网站的Web API,在端口8000上运行

我在Raspberry Pi中安装了两个容器。我的RPi主机名是raspberrypi 我用--net = host创建了两个容器,所以在我的网站上,我可以通过http://raspberrypi:8000/dosomething

来调用我的网站

但RPi的主机名可以更改,我无法使用新的API URL重新创建网站容器(例如:http // new_host_name:8000 / dosomething)所以我的问题是

有没有办法将主机名分配给容器,以便我可以在其他容器中使用它? 例如: 容器2使用“my_service”作为其主机名,因此在容器1中,我可以使用“http // my_service:8000 / dosomething”。我的客户可以更改他们的RPI主机名,我不需要更新我的代码。

谢谢,祝你有个美好的一天。

3 个答案:

答案 0 :(得分:0)

让我们假设您使用以下命令运行第一个容器:

docker run -d --name my_service web_api_image

所以你可以使用--link标志来运行第二个:

docker run -d -P --name web --link my_service:my_service website_image

然后,在网站容器中,您可以使用my_service主机名来引用web api。

请注意: --linkdeprecated

您也可以使用docker-compose

version: "2"
services:
  web_api:
    image: web_api_image
    container_name: web_api
    ports:
      - "8000:8000"
    expose:
      - "8000"
  website:
    image: website_image
    container_name: website
    ports:
      - "80:80"
    links:
      - "web_api:web_api"

替换图片名称并使用docker-compose up

运行

答案 1 :(得分:0)

您可以使用docker-compose,因为默认情况下同一个撰写文件中的所有容器都在同一个网络中,并且可以使用其服务名称相互调用。

但是,如果您使用docker run,则可以使用-h标志指定主机名。示例:docker run -h test.example.com -it ubuntu /bin/bash

我建议你研究一下docker-compose的aliases。更进一步,您和您的客户都可以使用env_file变量来指定变量的值。

答案 2 :(得分:0)

这是在docker中使用网桥驱动程序网络在两个容器之间进行通信的方法。

.net core 2.2中的github示例为here

[('Al', 2, 1.5), ('Bob', 2, 2.0), ('Carol', 3, 1.3333333333333333)]