我有一个任务要在 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
在 Linux 容器上,您可以使用 IP 地址访问主机
172.17.0.1
。因此,从 Java 应用程序内部,您应该能够访问 172.17.0.1:8081
、172.17.0.1:8082
和 172.17.0.1:8083
上的其他容器。这相当于在主机上使用 localhost:8081
、localhost:8082
和 localhost:8083
。
更新,2024 年 5 月:虽然上述方法有效,但您现在应该使用
--add-host
和特殊的 host-gateway
值将 DNS 条目添加到主机的容器中。常见的方法是使用 --add-host host.docker.internal=host-gateway
作为 docker run
的选项。这将允许您使用主机名访问主机host.docker.internal
。
在
--network="host"
命令上添加 docker run
,那么 docker 容器中的 127.0.0.1 将指向你的 docker 主机。 (仅适用于 Linux 或 Windows 容器上的 docker)
对于 docker for mac 或 docker for windows 只需使用主机连接服务
host.docker.internal
而不是127.0.0.1