2 回答
TA貢獻1804條經驗 獲得超2個贊
我將嘗試澄清 Michée Lengronne 所寫的內容,我認為他的回答只是部分正確。
你有兩個容器 -test里面有 postgres 運行,一個未命名的里面有你的 go 應用程序,這個容器的名稱是在每次容器啟動時隨機確定的。
這兩個容器都在同一個網絡上。這很重要。
ports使用 value定義時8001:5432,表示如果從定義的網絡外部連接,并且選擇端口8001進行連接,它將連接到5432內部的端口。
但是,如果您僅從同一網絡內連接,則可以省略定義ports并繼續直接連接到test容器。
意思是,使用帶有默認端口 ( ) 的容器名稱5432就足夠了。
TL; 博士
DATABASE_URL=postgres://short:password@test:5432/shorturl
TA貢獻1834條經驗 獲得超8個贊
如果要連接到本地 postgres 或另一個 docker 網絡中的 postgres,則必須在該變量中提供 postgres 的 IP 或域名:DATABASE_URL=postgres://short:password@test:8001/shorturl
通常你應該替換test為localhost或127.0.0.1
從錯誤中,您的應用程序嘗試連接到172.18.0.2. 我想這個IP是來自postgres容器的IP。在此特定容器的 docker 網絡之外無法訪問它。如果您想通過此 IP 訪問您的容器,您必須將您的應用程序容器添加到 postgres docker 網絡。
Docker 網絡和撰寫:https ://docs.docker.com/compose/networking/
- 2 回答
- 0 關注
- 114 瀏覽
添加回答
舉報
