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 关注
- 115 浏览
添加回答
举报
