[請益] Docker compose 使用 postgres 問題

看板Soft_Job作者 (yoooooz)時間3年前 (2020/09/07 00:37), 編輯推噓9(9022)
留言31則, 12人參與, 3年前最新討論串1/1
請問一下 我創建了 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

09/07 00:40, 3年前 , 1F
dbhost 改 db
09/07 00:40, 1F

09/07 00:57, 3年前 , 2F
最簡單的說 網路也是虛擬化出來的 一切和你想的不同
09/07 00:57, 2F

09/07 00:59, 3年前 , 3F
docker compose中name可以當domain用 也就是一樓講的改法
09/07 00:59, 3F

09/07 01:08, 3年前 , 4F
你要瞭解 docker network 的部分 容器的 127.0.0.1 是他
09/07 01:08, 4F

09/07 01:09, 3年前 , 5F
自己 不是 host 然後你用容器的 IP 172.X.X.X 應該是可
09/07 01:09, 5F

09/07 01:09, 3年前 , 6F
以的 你可能要確認一下用 docker-compose 跑起來的容器
09/07 01:09, 6F

09/07 01:09, 3年前 , 7F
IP 是多少 最後 正規的容器連容器的方式是用容器的名稱
09/07 01:09, 7F

09/07 01:09, 3年前 , 8F
當作 domain name 去連
09/07 01:09, 8F

09/07 01:19, 3年前 , 9F
啊 對了 如果是用 docker-compose 的話 domain name 就
09/07 01:19, 9F

09/07 01:19, 3年前 , 10F
是服務的名稱 以你的例子就是 auth 跟 db
09/07 01:19, 10F

09/07 07:32, 3年前 , 11F
看你檔案,應該是連結5432
09/07 07:32, 11F

09/07 07:33, 3年前 , 12F
沒事搞錯了
09/07 07:33, 12F

09/07 09:06, 3年前 , 13F
09/07 09:06, 13F

09/07 09:08, 3年前 , 14F
09/07 09:08, 14F

09/07 09:09, 3年前 , 15F
第二篇比較清楚
09/07 09:09, 15F

09/07 09:14, 3年前 , 16F
你第一種的docket run想要用127.0.0.1:5432連線的話 參
09/07 09:14, 16F

09/07 09:14, 3年前 , 17F
數要加--network host把network接到host上應該就可以了
09/07 09:14, 17F

09/07 09:18, 3年前 , 18F
關鍵字用docker compose network去搜會找到很多說明的
09/07 09:18, 18F

09/07 09:18, 3年前 , 19F
文章看完你就會懂了
09/07 09:18, 19F

09/07 09:19, 3年前 , 20F
不懂再站內
09/07 09:19, 20F

09/07 10:10, 3年前 , 21F
感謝各位,我先去了解了解
09/07 10:10, 21F

09/07 10:13, 3年前 , 22F
阿一樓說的改成db指的是 Dockerfile 裡面 ENV 的 DBHOST嗎
09/07 10:13, 22F

09/07 12:05, 3年前 , 23F
用dc時, 在auth裡面db這個hostname會被resolve到db containe
09/07 12:05, 23F

09/07 12:05, 3年前 , 24F
r. 所以你直接把py裡面的hostname改成db就可以了
09/07 12:05, 24F

09/07 12:09, 3年前 , 25F
另外用dc時, 因為你把5432 map到db container的5432, 所以你
09/07 12:09, 25F

09/07 12:10, 3年前 , 26F
也可以用host.docker.internal:5432來連.
09/07 12:10, 26F

09/07 14:41, 3年前 , 27F
對的 ENV DBHOST db
09/07 14:41, 27F

09/08 16:25, 3年前 , 28F
試試overlay?
09/08 16:25, 28F

09/09 19:53, 3年前 , 29F
去把cgroup弄懂
09/09 19:53, 29F

09/10 16:14, 3年前 , 30F
你有寫 container name 那連結方式用該 name 就好啦
09/10 16:14, 30F

09/10 16:14, 3年前 , 31F
除非你綁死不然 container restart 的時候 IP 是有可能變
09/10 16:14, 31F
文章代碼(AID): #1VLH0pTO (Soft_Job)