【问题标题】:How to Make Docker Use Specific IP Address for Browser Access from the Host如何让 Docker 使用特定 IP 地址从主机访问浏览器
【发布时间】:2021-03-21 02:19:15
【问题描述】:

我使用 docker 来构建 UI 和一些后端微服务,并使用 Spring Zuul 作为代理将 Restful API 调用从 UI 传递到下游微服务。我的UI项目需要在构建前在JS文件中指定IP地址,Zuul项目也需要为下游微服务指定IP地址。这样在启动容器后,我可以使用我的 docker 机器 IP http://192.168.10.1/myapp 访问我的应用程序,浏览器网络选项卡中的 restful API 调用将是 http://192.168.10.1/mymicroservices/getProduct 等。

我可以将所有 IP 设置为我的 docker 机器 IP 并毫无问题地构建它们。但是对于我在其他国家的同事,他们的 docker 机器 IP 会有所不同。如何让docker使用特定的IP,例如192.168.10.50,我可以在UI项目和Zuul Proxy项目中设置,这样每个人的docker IP都是一样的,不管他们实际的docker机器IP是多少是吗?

我尝试过的:

  1. 我在 VirtualBox 中尝试过端口转发。它适用于 UI,但 RESTful API 调用失败。
  2. 我也尝试了这篇文章中提到的解决方案: Assign static IP to Docker container 但是我无法使用容器 IP 地址从浏览器访问服务。

你有更好的想法吗?谢谢!

【问题讨论】:

  • My UI project needs to specify an IP address in the JS file before the build, and the Zuul project also needs to specify the IP addresses for the downstream microservices. - 这听起来很奇怪。你不能使用主机名而不是硬编码的 IP 吗?
  • 嗨,Shashank,您的意思是使用 localhost 还是 127.0.0.1?当我在 docker 中构建图像并运行容器时,这不起作用。

标签: docker virtualbox docker-machine docker-networking docker-network


【解决方案1】:

首先要澄清一些事情,

  • 如果您正在使用docker run .....,那么您只需在安装在主机上的 docker 中启动容器。现在,docker 可以更改主机的 ip。因此,如果您的其他服务在其他地方运行,他们将不得不了解有关 docker 主机、ip 或 dns 名称的信息。 所以基本上,如果您在 docker 主机上尝试,docker 确实在 127.0.0.1 上运行,或者如果从外部尝试,则在主机 IP 上运行。所以docker启动不需要主机IP。

  • 另一件事是如果你是doing docker-composer up/start。这意味着所有服务都在该 docker compose 文件中。在这种情况下,docker composer 为其中的所有容器创建 docker 网络。在这种情况下,您绝对可以为容器使用固定 IP,但通常您不需要这样做,因为 docker 负责该网络中的名称解析。

如果你正在做 k8s 方式 - 那么它是第三种方式(生产方式),它是另一个故事。

如果以上都不是,请提供更多关于你是如何做事的信息。

编辑 - 到:

如果您使用 docker composer 并且需要将任何容器暴露给主机,您可以通过端口映射来实现:

web:
    image: some image here
    ports:
      - 8181:8080

左边是主机端口,右边是容器端口

然后在主机上的浏览器中你可以向 localhost:8181 发出请求

这里是文档 https://docs.docker.com/compose/compose-file/#ports

【讨论】:

  • 感谢您的回答。我关注了这篇帖子stackoverflow.com/questions/27937185/… 并尝试创建自己的网络:docker network create --subnet=172.18.0.0/16 mynet123,然后运行镜像:docker run --net mynet123 --ip 172.18.0.22 -it ubuntu bash,但是当我尝试使用 172.18.0.22 从浏览器访问它时,它对我不起作用。似乎我们无法从浏览器使用容器的 IP 访问容器?
  • 修改了答案,以便您了解如何将 docker compose 网络中的容器暴露给主机
猜你喜欢
  • 1970-01-01
  • 2019-05-28
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 2014-05-21
  • 1970-01-01
相关资源
最近更新 更多