我試圖使用Docker容器來運行PostgreSQL服務器,並從我的主機連接它。Postgres 9.1的Docker容器不公開端口5432到主機
我的配置是:
- 主機:Mac OS X的10.10.5
- 泊塢窗1.10.1
我已經做到了這一點:
步驟1 :創建永久postgres數據量
docker volume create --name postgres_data
步驟2:啓動postgres的實例
UPDATE:連接到多克爾實例:如意見提出,我運行容器
docker run --name my_postgres_container -e POSTGRES_PASSWORD=my_password -v postgres_data:/var/lib/postgresql/data -p 5432:5432 -d postgres:9.1
步驟3時指定端口映射通過這樣做:
docker run -it --link my_postgres_container:postgres --rm postgres:9.1 sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
Bu t我想通過以下方式連接到該實例:
psql -h localhost -p 5432 -U postgres
就像我在本地主機中安裝Postgres一樣。
問題是端口5432未曝光。所以,我不能用它連接:
sudo lsof -i -P | grep -i "listen"
- >沒有端口5432打開
更新2:即使是陌生人。我也這樣做了:
停止Docker。然後,在我的主機(此處沒有涉及到docker,只是在我的Mac OS X主機上運行postgres,監聽5432端口)上運行普通PostgreSQL 9.4.4實例。一切正常:
sudo lsof -i -P | grep -i "postgres"
postgres 14100 jorge 6u IPv4 0x780274158cebef01 0t0 TCP localhost:5432 (LISTEN)
我可以與本地的Postgres實例連接沒有任何問題(看看命令的輸出:是編譯的Mac OS X的Postgres的,我的主機):
psql -h localhost -U postgres -c "select version()"
version
---------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 9.4.4 on x86_64-apple-darwin14.3.0, compiled by Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn), 64-bit
(1 row)
現在有趣的部分。當主機PostgreSQL實例正在運行時,我再次啓動Docker實例,。
它開始! (而且不應該)。我甚至可以
docker run -it --link my_postgres_instance:postgres --rm postgres:9.1 sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
連接使用泊塢窗跑......如果我現在運行選擇()版本,它顯示在同一時間的Postgres我的搬運工實例中運行的Postgres在我的主機正在運行,從泊塢窗,使用相同的5432端口。(看看輸出,是postgres爲Debian編譯的,postgres裏面的操作系統:9.1容器)
postgres=# select version();
version
------------------------------------------------------------------------------------------------
PostgreSQL 9.1.20 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit
(1 row)
爲什麼?
它有道理嗎?我的最終目標是在另一個Docker容器中運行Django應用程序,並與我的Postgres實例連接。我怎麼能這樣做?
謝謝!我已經做到了。但仍然無法使用psql進行連接。端口5432沒有被暴露,或者我不知道如何連接。我的主機的psql程序工作正常(我可以連接到其他主機,但不能連接到我的容器) – jorgeas80
什麼'docker port'顯示? –
它應該打印出類似'5432/tcp - > 0.0.0.0:5432' –