[請益] Docker compose 使用 postgres 問題

作者: yoz4ni (yoooooz)   2020-09-07 00:37:04
請問一下
我創建了 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
感謝幫忙!!!
作者: MARGHT   2020-09-07 00:40:00
dbhost 改 db
作者: ldkrsi (衰神)   2020-09-07 00:57:00
最簡單的說 網路也是虛擬化出來的 一切和你想的不同docker compose中name可以當domain用 也就是一樓講的改法
作者: wuchihsu (57)   2020-09-07 01:08:00
你要瞭解 docker network 的部分 容器的 127.0.0.1 是他自己 不是 host 然後你用容器的 IP 172.X.X.X 應該是可以的 你可能要確認一下用 docker-compose 跑起來的容器IP 是多少 最後 正規的容器連容器的方式是用容器的名稱當作 domain name 去連
作者: x246libra (楓)   2020-09-07 07:32:00
看你檔案,應該是連結5432沒事搞錯了
作者: MOONY135 (談無慾)   2020-09-07 09:06:00
作者: ga013077 (Daky)   2020-09-07 09:14:00
你第一種的docket run想要用127.0.0.1:5432連線的話 參數要加--network host把network接到host上應該就可以了關鍵字用docker compose network去搜會找到很多說明的文章看完你就會懂了不懂再站內
作者: yoz4ni (yoooooz)   2020-09-07 10:10:00
感謝各位,我先去了解了解阿一樓說的改成db指的是 Dockerfile 裡面 ENV 的 DBHOST嗎
作者: l7th (1931)   2020-09-07 12:05:00
用dc時, 在auth裡面db這個hostname會被resolve到db container. 所以你直接把py裡面的hostname改成db就可以了另外用dc時, 因為你把5432 map到db container的5432, 所以你也可以用host.docker.internal:5432來連.
作者: wwwc (...... )   2020-09-07 14:41:00
對的 ENV DBHOST db
作者: leo08210917 (leo)   2020-09-08 16:25:00
試試overlay?
作者: pttano (pttano)   2020-09-09 19:53:00
去把cgroup弄懂
作者: chan15 (ChaN)   2020-09-10 16:14:00
你有寫 container name 那連結方式用該 name 就好啦除非你綁死不然 container restart 的時候 IP 是有可能變

Links booklink

Contact Us: admin [ a t ] ucptt.com