Linux环境下Docker容器内部访问宿主机localhost的方法咨询
Linux Docker容器内访问宿主机localhost解决方案
方案1:使用host网络模式(最适配需求)
- 启动Java应用容器时,将网络模式指定为host,参考启动命令:
docker run -d --network host --name java-app 你的Java镜像名称 - 实现逻辑:host模式下容器与宿主机共享网络命名空间,容器内部的
localhost和宿主机localhost完全等价,直接请求http://localhost:8081、http://localhost:8082等地址即可正常访问另外三个容器映射到宿主机的服务,无需修改Java应用代码。 - 注意事项:使用host模式后不需要额外配置
-p 8080:8080端口映射,Java应用的8080端口会直接暴露在宿主机的8080端口上。
补充说明:如果Java应用仍需要保留和另外三个容器通过容器名通信的能力,可将三个容器也同步改用host网络启动,或者直接通过
localhost:端口访问三个容器的服务即可满足要求。
方案2:自定义hosts映射(保留自定义桥接网络)
如果需要保留你之前创建的web_server自定义桥接网络,可通过添加host映射实现:
- Docker 20.10及以上版本启动Java容器时添加
--add-host参数,参考启动命令:docker run -d --network web_server -p 8080:8080 --add-host localhost:host-gateway --name java-app 你的Java镜像名称 - 实现逻辑:该参数会自动在容器的
/etc/hosts文件中添加localhost指向宿主机网关IP的记录,容器内请求localhost时会直接路由到宿主机,即可访问宿主机上的8081/8082/8083端口。 - 注意事项:该方案会覆盖容器内部默认的localhost指向(原本指向容器自身),如果你的Java应用需要访问容器自身的其他服务端口,该方案不适用,优先选择方案1。
内容的提问来源于stack exchange,提问作者user14483828
相关产品推荐
相关产品推荐

