[英]How to Connect to Docker Postgres Container from Host Machine
我按照https://docs.docker.com/compose/rails/中的說明整理了Rails開發環境
它可以工作,但是我無法從主機連接到Postgres服務器。 我正在運行macOS High Sierra。 當我運行docker container ls
我看到5432/tcp
作為Postgres容器的端口。 請注意,沒有5543前面列出的IP。運行docker docker network inspect <postgress_container_ID>
我將獲得172.18.0.2作為IP。
但是當我運行psql -h 172.18.0.2 -p 5432 -U postgres
xpsql: could not connect to server: Operation timed out
Is the server running on host "172.18.0.2" and accepting
TCP/IP connections on port 5432?
我究竟做錯了什么?
通過查看詳細信息5432 / tcp ,在我看來您尚未導出端口號5432 。
如果您已導出端口,則它應該看起來像。
0.0.0.0:5432->5432/tcp
然后使用主機IP地址(您的本地Mac機器ip),您應該可以連接,如果仍然無法運行,請共享您的docker命令-您如何運行容器?
Docker撰寫文件
version: '3'
services:
db:
image: postgres
ports:
- "5432:5432"
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/airbnb
ports:
- "3000:3000"
depends_on:
- db
在您的docker-compose文件中,您沒有公開端口號5432,因此從外部您將無法連接Postgres DB。
嘗試添加端口:-在docker-compose文件中添加“ 5432:5432” 。 然后使用您的計算機IP地址,您應該能夠連接數據庫。
默認情況下, postgres公開端口5432 。 這只會將端口暴露給同一Docker網絡中的其他容器-即撰寫文件中的所有其他容器。 這是因為默認情況下, docker compose會為compose文件中的所有容器創建一個網絡 。
您可以通過幾種方法從主機連接到容器:
HOST:CONTAINER
格式公開端口 ,這將使容器的端口在HOST
IP上可用。 例如,使用127.0.0.1:5432
以便您可以訪問主機上該地址處的端口。 172.18.0.2
,則網關可能為172.18.0.1
。 通常有一種使用postgres和套接字庫執行此操作的方法,但是不幸的是,我沒有看到使用psql
進行此操作的方法。 另一個選擇是從Docker網絡中的容器訪問它。 您可以docker-compose run --rm db psql -h db -U postgres
來運行一個一次性容器,該容器具有與db
容器相同的Docker映像,並且位於同一網絡中。
使用實際運行Docker的VM的IP。 您可以通過運行以下命令找到該IP:
docker-machine ip default
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.