【发布时间】:2019-07-30 04:03:02
【问题描述】:
使用 docker-compose up 时,我的 Phoenix 应用无法连接到 Postgres 容器。
我的 docker-compose.yml:
version: '3.5'
services:
web:
image: "solaris_cards:latest"
ports:
- "80:4000"
env_file:
- config/docker.env
depends_on:
- db
db:
image: postgres:10-alpine
volumes:
- "/var/lib/postgresql/data/pgdata/var/lib/postgresql/data"
ports:
- "5432:5432"
env_file:
- config/docker.env
在 web 容器中运行的应用程序抱怨与 Postgres 容器的连接不存在:
[error] Postgrex.Protocol (#PID<0.2134.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect (db:5432): non-existing domain - :nxdomain
我的环境变量:
DATABASE_HOST=db
DATABASE_USER=postgres
DATABASE_PASS=postgres
我尝试过先单独运行 Postgres 容器,然后再运行 Web 容器,但还是有同样的问题。
如果我将数据库主机更改为 0.0.0.0(这是 Postgres 运行时显示的内容),那么它似乎可以连接,但连接被拒绝而不是找不到。
但是 docker 应该能够在我手动输入 ip 的情况下翻译主机名。
【问题讨论】:
-
从您的网络容器(docker exec -it web sh)尝试命令
getent hosts db,它应该显示您的数据库容器的IP。如果没有,则名称解析有问题,如果有,则可能是 db 容器有问题 -
@PierreB。我在我的 Web 容器上尝试了 getent hosts db 命令,但它什么也没返回。
-
奇怪,我尝试了您的 compose 的类似版本,它可以工作:
getent hosts db 172.23.0.2 db db您是否尝试过然后升级您的 compose? -
@PierreB。进一步挖掘后,我发现了问题。由于卷已包含数据,Postgres 容器正在退出。能够使用 docker-compose down -v 清除卷并解决了问题。感谢您的帮助。
标签: postgresql docker docker-compose phoenix-framework