Docker容器的IP地址差异

在Docker入门教程https://docs.docker.com/get-started/part2/#share-your-image中 ,容器启动时使用docker run -p 4000:80 friendlyhello ,容器服务器可以从http://localhost:4000访问http://localhost:4000 ,如预期。 但是当我试图在容器中运行Postgres时,使用Dockerfile FROM postgres ENV POSTGRES_USER=user-ms ENV POSTGRES_PASSWORD=12345

和命令docker run -p 5432:5432 user-db ,服务器不能在本地主机访问,只有在psql -h 172.17.0.2

为什么这两种情况不一样? 根据https://docs.docker.com/engine/userguide/networking/ ,默认情况下,它们都应该在桥接networking中,使用172.17.0.1网关。 第一个例子是如何在本地主机上访问?

你确定? 我尝试了以下内容:

 docker run --rm -it -p 5432:5432 -e POSTGRES_USER=user-ms -e POSTGRES_PASSWORD=12345 postgres 

我尝试从Docker主机build立连接…

本地主机工作:

 psql --user user-ms -h localhost 

而本地IP地址也起作用:

 psql --user user-ms -h "$(ifconfig \ | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" \ | grep -v 127.0.0.1 \ | awk '{ print $2 }' \ | cut -f2 -d: \ | head -n1)"