docker-compose和127.0.0.1内部访问服务

时间:2018-01-10 09:37:58

标签: docker network-programming docker-compose

我有以下docker-compose.yml配置(出于演示原因简化):

version: '3'
services:
   web:
     image: tomcat:8.0.48-jre8

    db:
      image: postgres:9.6.6
      expose:
        - "5432"

我可以使用db网址从web服务访问postgres:5432服务。我想知道有没有办法映射/重新映射内部Docker网络,以便只使用webweb服务访问提到的127.0.0.1:5432服务?

web未使用/绑定到5432端口,这就是为什么我认为有可能实现我所需要的。

1 个答案:

答案 0 :(得分:0)

默认情况下,每个容器都在其自己的网络命名空间中运行,因此一个容器中的localhost与其他容器的命名空间不同。容器之间没有转发端口,只有在发布时才从主机转发到容器。在容器之间,您只需要一个公共网络,并且所有端口都可用,因此您甚至不需要expose命令,但您需要指定目标容器的ip或dns名称。

这不是最佳做法,但您可以使用另一个容器的网络命名空间。我只在用netshoot工具调试运行容器的网络时才这样做,例如:

docker run -it --rm --net container:$container_id nicolaka/netshoot netstat -lnt

该命令将创建第二个容器,该容器使用与现有容器相同的网络命名空间,并显示该网络上的侦听网络端口。