2017-09-01 88 views
0

在介绍性的Docker教程https://docs.docker.com/get-started/part2/#share-your-image中,集装箱以docker run -p 4000:80 friendlyhello启动,容器服务器可按照预期从http://localhost:4000访问。 但是,当我试图在容器中运行的Postgres,与Dockerfile FROM postgres ENV POSTGRES_USER=user-ms ENV POSTGRES_PASSWORD=12345 码头集装箱IP地址差异

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

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

+0

你会得到什么错误? –

+0

您可以检查'docker inspect harshavmb

+0

错误是'''psql:无法连接到服务器:没有这样的文件或目录 \t服务器是否在本地运行并接受了在Unix域套接字上的连接 \t“/var/run/postgresql/.s.PGSQL.5432 “?''', 请检查下面的评论。 –

回答

0

你确定吗?我试过如下:

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

我试图建立从泊坞窗主机将它连接...

本地主机的工作:

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)" 
+1

你说得对,我的错。使用'psql'而不指定主机,这意味着它尝试了Unix域套接字。被设置码头工人占据了主导地位,认为它必须是配置的东西。 –

+0

并想通过Dockerfile运行它,而不是命令行。 –