2017-09-01 68 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運行它,而不是命令行。 –