Github Actions中Postgres服务容器无法访问报:nxdomain错误如何解决?
问题原因
出现:nxdomain报错是因为Docker构建容器与Github Actions启动的Postgres服务容器不在同一网络下,无法解析postgres服务域名:
- Github Actions为Job创建的服务容器默认挂载到专属的
github_network_前缀的网桥 - 直接执行
docker build启动的构建容器默认使用Docker默认网桥,两个网络互相隔离,自然无法通过服务名访问Postgres
解决方案
方案1:通过主机端口访问(配置最简单)
你已经将Postgres的5432端口映射到了Runner主机的5432端口,只需将构建时传入的DATABASE_HOST改为Docker网桥默认网关地址即可:
- name: building image env: DATABASE_HOST: 172.17.0.1 DATABASE_PORT: 5432 run: | docker build --build-arg DATABASE_HOST=$DATABASE_HOST -t backend:test -f Dockerfile.ci .
方案2:构建容器加入服务所在网络(无需修改业务配置)
先获取当前Job对应的专属网桥名称,构建时指定使用该网络,即可直接通过postgres服务名访问数据库:
- name: building image env: DATABASE_HOST: postgres DATABASE_PORT: 5432 run: | CI_NETWORK=$(docker network ls --filter name=github_network_ --format "{{.Name}}") docker build --network $CI_NETWORK --build-arg DATABASE_HOST=$DATABASE_HOST -t backend:test -f Dockerfile.ci .
内容的提问来源于stack exchange,提问作者Bruno Ripa
相关产品推荐
相关产品推荐

