※ 本文轉寄自 ptt.cc, 文章原始頁面
看板Soft_Job
標題

[請益] Docker compose 使用 postgres 問題

時間
最新2020-09-10 16:14:00
留言31則留言,12人參與討論
推噓9 ( 9022 )
請問一下 我創建了 postgres 的容器,然後寫了一個 python 的程式去連接這個資料庫(python 的程式一樣在 docker 上) 然後我目前是使用 docker build run 的方式去啟動,但是如果我連資料庫的 IP 填 127.0.0.1 的話會無法連線,如果改成了資料庫容器裡的 IP(這裡是 172.17.0.2) 就可以成功,為什麼阿? 但是當我換成用 docker-compose 執行時,使用 127.0.0.1 跟 172.17.0.2 都失敗,反而使用電腦的IP(192.168.0.102(跑在虛擬機上)),就可以連成功? 請問問題出在哪裡啊? 我找資料找了一整天找不到類似的文章,來這裡問問大神 這是我寫的 Dockerfile 和 docker-compose.yml 內容: https://pastebin.com/iNC1tFPn 感謝幫忙!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.213.197.216 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1599410227.A.758.html

31 則留言

MARGHT, 1F
dbhost 改 db

ldkrsi, 2F
最簡單的說 網路也是虛擬化出來的 一切和你想的不同

ldkrsi, 3F
docker compose中name可以當domain用 也就是一樓講的改法

wuchihsu, 4F
你要瞭解 docker network 的部分 容器的 127.0.0.1 是他

wuchihsu, 5F
自己 不是 host 然後你用容器的 IP 172.X.X.X 應該是可

wuchihsu, 6F
以的 你可能要確認一下用 docker-compose 跑起來的容器

wuchihsu, 7F
IP 是多少 最後 正規的容器連容器的方式是用容器的名稱

wuchihsu, 8F
當作 domain name 去連

wuchihsu, 9F
啊 對了 如果是用 docker-compose 的話 domain name 就

wuchihsu, 10F
是服務的名稱 以你的例子就是 auth 跟 db

x246libra, 11F
看你檔案,應該是連結5432

x246libra, 12F
沒事搞錯了

MOONY135, 13F

MOONY135, 14F

MOONY135, 15F
第二篇比較清楚

ga013077, 16F
你第一種的docket run想要用127.0.0.1:5432連線的話 參

ga013077, 17F
數要加--network host把network接到host上應該就可以了

ga013077, 18F
關鍵字用docker compose network去搜會找到很多說明的

ga013077, 19F
文章看完你就會懂了

ga013077, 20F
不懂再站內

yoz4ni, 21F
感謝各位,我先去了解了解

yoz4ni, 22F
阿一樓說的改成db指的是 Dockerfile 裡面 ENV 的 DBHOST嗎

l7th, 23F
用dc時, 在auth裡面db這個hostname會被resolve到db containe

l7th, 24F
r. 所以你直接把py裡面的hostname改成db就可以了

l7th, 25F
另外用dc時, 因為你把5432 map到db container的5432, 所以你

l7th, 26F
也可以用host.docker.internal:5432來連.

wwwc, 27F
對的 ENV DBHOST db

leo08210917, 28F
試試overlay?

pttano, 29F
去把cgroup弄懂

chan15, 30F
你有寫 container name 那連結方式用該 name 就好啦

chan15, 31F
除非你綁死不然 container restart 的時候 IP 是有可能變