在介绍性Docker教程https://docs.docker.com/get-started/part2/#share-your-image中,容器以docker run -p 4000:80 friendlyhello
启动,容器服务器可从http://localhost:4000
访问,如预期的那样。
但是当我尝试使用Dockerfile在容器中运行Postgres时
FROM postgres
ENV POSTGRES_USER=user-ms
ENV POSTGRES_PASSWORD=12345
和命令docker run -p 5432:5432 user-db
,只能在psql -h 172.17.0.2
在localhost访问服务器。
为什么这两种情况不同?
根据{{3}},默认情况下,两者都应位于桥接网络中,并使用172.17.0.1
网关。为什么第一个例子不能在localhost上访问?
答案 0 :(得分:0)
docker run --rm -it -p 5432:5432 -e POSTGRES_USER=user-ms -e POSTGRES_PASSWORD=12345 postgres
我尝试从Docker主机建立连接...
Localhost工作:
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)"