Docker端口映射和主机名

时间:2018-11-06 20:38:16

标签: docker docker-compose

我有一个问题,或者最好说两个。两者都取决于Docker,并且与对Docker如何处理容器主机名和端口的理解有关。

假设我有两个服务在不同的docker容器中运行,并且将端口80从容器暴露给端口8081(service1)和端口8082(service2):

服务1:8081:80 service2:8082:80

现在我很清楚,从主机角度来看,我可以使用暴露的端口(http://localhost:8081http://localhost:8082)访问这些服务。但是,如果我想使用http://container1http://container2之类的容器来访问我的服务怎么办?要实现此szenario含义,我必须要做的事情:

  • 端口转发可能如何
  • 以及我如何知道确切的主机名,以便可以从docker主机上解析容器的主机名?

感谢帮助!

1 个答案:

答案 0 :(得分:0)

正如伊贾兹·艾哈迈德·汗(Ijaz Ahmad Khan)所说。您必须使用该网络内的另一个容器作为代理,例如nginx。

如果您要将docker-compose的端口公开到主机(您的PC),则只有您所提到的带有特定端口的localhost域可见。如果您像这样运行docker-compose.yml

version: "3"
services:
  service1:
    image: something
    name: service1_name
    ports:
      - "8081:80"
  service2:
    image: something
    name: service2_name
    ports:
      - "8082:80"

Docker-compose将在后缀为docker-compose.yml的女巫_default中创建由文件夹命名的默认网络。在此网络中,所有容器都可以看到对方。 expose命令用于此网络内的容器(以便他们可以互相看到并进行通信),port用于发布到主机(您的PC)。 这意味着:

service1在您的计算机上显示为http://localhost:8081,对于网络中的其他容器,显示为service1:80

service2在您的计算机上显示为http://localhost:8082,对于网络中的其他容器,显示为service2:80

请确保指定的容器名称对服务网络地址没有影响。要测试容器仅在网络内部可见,请尝试从另一个容器ping

docker run --rm --network=your_folder_name_default debian ping service1

要检查容器在哪个网络中运行,可以使用inspect

docker inspect service1_name

现在您必须使用容器名称