Docker构建时如何访问宿主机器上绑定域名的端口资源?
最优解决方案:Docker Build时访问Mac宿主绑定的example.com服务
方案1:自动获取host.docker.internal IP并传入--add-host
针对无法修改宿主服务配置的场景,用脚本自动解析host.docker.internal的IP,避免手动复制的繁琐和不稳定:
用dig解析(推荐,更稳定)
HOST_IP=$(dig +short host.docker.internal) docker build --add-host example.com:$HOST_IP .
用ping解析(兼容无dig的环境)
HOST_IP=$(ping -c 1 host.docker.internal | awk '/^PING/{print $3}' | sed 's/[()]//g') docker build --add-host example.com:$HOST_IP .
这个脚本会自动获取宿主在Docker网络中的IP,直接传递给--add-host参数,全程无需手动干预,稳定性比手动ping后复制高很多。
方案2:修改宿主服务监听地址(一劳永逸,优先推荐)
问题根源是宿主服务仅监听127.0.0.1,拒绝外部(包括Docker容器)的接入请求。只要把服务的监听地址改为0.0.0.0(允许所有网卡接入)或者宿主的局域网IP,就能直接利用Docker的host-gateway令牌:
修改服务配置:
- 比如Nginx:将
listen 127.0.0.1:8888;改为listen 0.0.0.0:8888; - 比如Python Flask:启动命令改为
app.run(host='0.0.0.0', port=8888) - 其他服务同理,找到监听地址配置项修改即可。
- 比如Nginx:将
构建时直接使用
host-gateway:
docker build --add-host example.com:host-gateway .
这样修改后,不仅构建过程中能正常访问example.com:8888,后续容器运行时也能直接通过该域名访问宿主服务,是最彻底的解决方案。
内容的提问来源于stack exchange,提问作者Robino
相关产品推荐
相关产品推荐

