2016-08-07 47 views
3

Docker的最新版本不再使用虛擬機,而是使用虛擬機管理程序連接到容器。這意味着我再也不能登錄到與psql Postgres的:如何連接到Mac上的Docker(1.12.0)容器中的Postgres服務器?

➜ postgres git:(master) ✗ docker run -d -p 5433:5432 db postgres 
<sha> 
➜ postgres git:(master) ✗ docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS     NAMES 
111f3bed4c52  db     "/docker-entrypoint.s" 17 minutes ago  Up 17 minutes  0.0.0.0:5433->5432/tcp zen_hugle 
➜ postgres git:(master) ✗ psql -p 5433 -U postgres 
psql: could not connect to server: No such file or directory 
    Is the server running locally and accepting 
    connections on Unix domain socket "/tmp/.s.PGSQL.5433"? 

我也曾嘗試localhost指定爲主機,而導致一個奇怪的輸出:

➜ postgres git:(master) ✗ psql -h localhost -p 5433 -U postgres 
psql: % 

有誰知道該怎麼做在這種情況下?謝謝。

+1

僅供參考,它確實使用VM,而不是VirtualBox,它在Mac上使用xhyve虛擬機,但使用Unix套接字進行網絡連接。如果您需要「本地」模型(例如,更接近模仿生產系統),則最好使用傳統VM環境。 – ldg

+0

我假設在你的run聲明中它應該是'docker run -d -p 5433:5432 --name = db postgres' – ldg

回答

0

您可以通過使用IP如psql -h 0.0.0.0 -p 5433 -U postgres(或127.0.0.1等)通過TCP連接。

使用默認或「本地主機」將嘗試使用本地域套接字(儘管Docker的版本不會改變這種行爲,您通常需要通過tcp連接到一個容器化的數據庫)。

+0

它不會因爲任何原因而工作。 – picardo

1

隨着follwing命令,

docker run -d -p 5433:5432 db postgres 

要導出您的碼頭工人的5432端口泊塢窗,發動機的5433端口。不是你的主機的5433.

獲取與下面的命令你的碼頭工人,機器的IP地址(假設你的搬運工虛擬機的名稱爲default

docker-machine env default 

這應該給你造成類似於以下行

> export DOCKER_TLS_VERIFY="1" 
> export DOCKER_HOST="tcp://192.168.99.100:2376" 
> export DOCKER_CERT_PATH="/Users/<your-user>/.docker/machine/machines/default" 
> export DOCKER_MACHINE_NAME="default" 

使用您的碼頭機IP地址連接到在容器中運行的Postgres

>psql -h 192.168.99.100 -p 5433 -U postgres 

psql (9.5.0, server 9.5.5) 
Type "help" for help. 

postgres=# 
+0

它對我來說非常合適。謝謝!我使用了錯誤的IP地址。 –

相關問題