CentOS8.4下docker-compose部署prisma1.34时host.docker.internal无法使用
问题排查解决步骤
- 第一步:验证hosts解析是否生效
先进入运行中的Prisma容器,检查解析记录是否写入成功:
正常输出中会存在# 先获取容器ID/名称 docker ps | grep prismagraphql/prisma:1.34 # 查看容器内hosts文件 docker exec -it <替换为你的容器ID> cat /etc/hostshost.docker.internal <网关IP>的记录,若不存在请检查docker-compose.yml的YAML格式是否正确,确认extra_hosts字段缩进没有用Tab代替空格,格式符合YAML规范。 - 第二步:验证网络连通性
仍在容器内执行命令测试网络连通:
若ping失败,按以下顺序排查:# 测试ICMP连通 ping host.docker.internal # 测试PostgreSQL端口连通 nc -zv host.docker.internal 5432- 检查宿主机SELinux状态,执行
getenforce查看,若输出Enforcing,临时关闭测试setenforce 0,如果问题解决可以将SELinux设为permissive模式或者添加对应放行规则。 - 确认firewalld防火墙已完全关闭,或者已放行docker网段、5432端口:
若ping成功但端口不通,检查宿主机PostgreSQL配置:# 查看防火墙状态 systemctl status firewalld # 临时关闭防火墙测试 systemctl stop firewalld- 查看
postgresql.conf中listen_addresses配置,默认值为127.0.0.1,仅允许本地访问,需要改为*监听所有地址,修改后重启PostgreSQL服务。 - 查看
pg_hba.conf配置,添加docker网段的访问权限,新增行:
保存后重启PostgreSQL服务。host all all 172.16.0.0/12 scram-sha-256 - 检查宿主机SELinux状态,执行
- 第三步:替代方案测试
若host.docker.internal解析始终异常,可以直接使用docker网桥的网关IP访问宿主机:- 在宿主机执行
ip a show docker0,获取inet对应的IP地址,一般为172.17.0.1;如果是自定义docker网络,也可以在容器内执行ip route查看默认路由的网关IP。 - 将
docker-compose.yml中PRISMA_CONFIG下的host值替换为上述IP,重新启动容器测试。
- 在宿主机执行
内容的提问来源于stack exchange,提问作者Performau Todev
相关产品推荐
相关产品推荐

