2017-09-24 59 views
0

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

我有两个容器 容器1:它是一个网站,并运行在80端口 集装箱2:它是上述网站的网络API和运行在8000端口

我安装在我的树莓派两个容器。我RPI hostname是树莓派 我创建了两个集装箱,--net =主机,以便在我的网站,我可以通过http://raspberrypi:8000/dosomething

打电话给我的网站,但RPI的主机名是可以改变的,我不能重新创建网站容器新的API URL(例如:http // new_host_name:8000/DoSomething的),所以我的问题是

有什么办法指定主机名到一个容器,这样我可以在其他容器中使用它? 例如: 容器2使用“my_service”作为它的主机名,所以在容器1中,我可以使用“http // my_service:8000/DoSomething的”。我的客户可以更改他们的RPI的主机名,我不需要更新我的代码。

感谢,并有愉快的一天。

+2

https://docs.docker.com/compose/ – jonrsharpe

回答

0

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

docker run -d --name my_service web_api_image 

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

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

那么,网站的容器内,你可以参考到web api使用my_service主机名。

请注意: --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

+0

感谢。但是当我使用--link时,它会显示一条错误消息“docker:来自守护进程的错误响应:冲突选项:主机类型网络不能与链接一起使用,这会导致未定义的行为 ”。也许,我使用--net = host。无论如何,在这种情况下,你能给我一个关于码头合成的例子吗? – Doraemon

+0

不要使用'--net'标志。确保你删除了所有容器'docker ps -a'。如果你更喜欢码头作者,我编辑答案.. – ItayB

+0

@Doraemon是否有效?它的工作原理是 – ItayB

0

您可以使用docker-compose运行,因为同样的撰写文件中的所有容器都处在同一网络内的默认和可使用他们的服务名称互相呼叫。

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

我建议你寻找到泊坞窗,撰写的aliases。更进一步,您和您的客户都可以使用env_file变量来指定变量的值。