在两个docker集装箱之间进行通信

我是docker工人的新手,我需要你们对集装箱之间的沟通方面的帮助。

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

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

但RPi的主机名可以改变,我不能用新的API URL(例如:http // new_host_name:8000 / dosomething)重新创build网站容器,所以我的问题是

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

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

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

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。

请注意: – --link已被弃用 。

你也可以使用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" 

replace图像名称,并运行与docker-compose up

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

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

我会build议你看看docker-compose的别名 。 更进一步,您和您的客户都可以使用env_filevariables来指定variables的值。