You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器内无法访问命名Postgres服务器问题求助

解决Docker容器无法解析Postgres服务器名称的问题

你遇到的核心问题是容器内的DNS解析无法识别宿主机能正常解析的ServerName,下面给你几个实用的解决方案,按操作复杂度排序:

方法1:启动容器时添加自定义host映射(最直接,适合IP固定的场景)

既然你已经知道Postgres服务器的固定IP是10.1.1.25,可以在启动容器时直接把ServerName和IP的映射写入容器的/etc/hosts文件,用--add-host参数:

docker run --add-host ServerName:10.1.1.25 [你的其他启动参数] imageName

如果容器已经在运行,你也可以临时进入容器手动添加(但容器重启后会失效):

winpty docker exec -it containerName bash
echo "10.1.1.25 ServerName" >> /etc/hosts

方法2:让容器使用宿主机的DNS服务器

容器默认使用Docker内置的DNS服务,所以无法识别宿主机本地的DNS解析记录。你可以在启动容器时指定使用宿主机的DNS服务器——先在宿主机上查自己的DNS地址(Windows可以用ipconfig /all找到DNS服务器地址),然后用--dns参数:

docker run --dns 宿主机DNS地址 [你的其他启动参数] imageName

比如如果宿主机的DNS是192.168.1.1,就写成:

docker run --dns 192.168.1.1 [其他参数] imageName

这样容器会直接用宿主机的DNS来解析ServerName,和宿主机的解析行为保持一致。

为什么你之前的参数没起作用?

  • --net=host:在Windows的Docker Desktop环境下,这个参数的支持有限,不像Linux那样完全共享宿主机的网络命名空间,所以可能没生效;
  • -p ServerName:5432:5432:这个是端口映射参数,只能把宿主机的端口映射到容器,和DNS解析完全无关,所以对解决名称解析问题没用。

内容的提问来源于stack exchange,提问作者J.Warren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:57:34