我有以下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网络,以便只使用web
从web
服务访问提到的127.0.0.1:5432
服务?
web
未使用/绑定到5432
端口,这就是为什么我认为有可能实现我所需要的。
答案 0 :(得分:0)
默认情况下,每个容器都在其自己的网络命名空间中运行,因此一个容器中的localhost与其他容器的命名空间不同。容器之间没有转发端口,只有在发布时才从主机转发到容器。在容器之间,您只需要一个公共网络,并且所有端口都可用,因此您甚至不需要expose命令,但您需要指定目标容器的ip或dns名称。
这不是最佳做法,但您可以使用另一个容器的网络命名空间。我只在用netshoot工具调试运行容器的网络时才这样做,例如:
docker run -it --rm --net container:$container_id nicolaka/netshoot netstat -lnt
该命令将创建第二个容器,该容器使用与现有容器相同的网络命名空间,并显示该网络上的侦听网络端口。