如何在 Docker 容器中访问本地主机

8

我有一个任务要在localhost:8081、localhost:8082和localhost:8083上设置3个Docker容器,我已经成功完成了。然后还有一个最后的容器是在localhost:8080上的Java应用程序,它需要使用HttpClient和HttpRequest发送请求到其他容器,我创建了一个名为"docker network create web_server --driver brigde"的桥接,并使用"--network web_server"运行容器,这样它们可以使用容器名称进行通信并且可以正常工作。但我的老师告诉我要将请求发送到http://localhost:8081、8082等。是否有一种方法使容器访问localhost?我在Linux下使用Docker。

2个回答

17
在 Linux 容器中,你可以使用 IP 地址 172.17.0.1 访问主机。因此,在你的 Java 应用程序内部,你应该能够通过 172.17.0.1:8081172.17.0.1:8082172.17.0.1:8083 达到其他容器,这相当于在你的主机上使用 localhost:8081localhost:8082localhost:8083

1
实际上,'172.17.0.1' 访问了我的 Docker Ubuntu 主机,而无需调整网络设置,而 'host.docker.internal' 明显失败了。 - Grigoreas P.

2
在你的docker run命令中添加--network="host",然后你的docker容器中的127.0.0.1将指向你的docker主机。(仅适用于Linux或Windows容器的docker)
对于Mac或Windows上的docker,请使用host.docker.internal而不是127.0.0.1连接服务。

2
--network=host 禁用了 Docker 的网络层。这将破坏“正常”的跨容器网络,例如在 Compose 中的网络 中描述的。对于常规 Web 应用程序,您不需要它。 - David Maze
@DavidMaze 等一下...看看“上下文”。这是老师布置的作业。我们不讨论运行容器用于生产目的。所以回到上下文,这个选项存在并且据我所知解决了最初的问题。踩得有点过分了;-) - CodeScale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接