【问题标题】:Docker - Make docker containers use my public ipDocker - 让 docker 容器使用我的公共 ip
【发布时间】:2019-04-21 22:01:34
【问题描述】:

问题

我有一个在容器内运行的反应应用程序。我需要请求一个 API(不是我的),它只接受公共 IP 地址。容器可以使用我机器的公网地址吗?

Docker 编写

version: '3'

services:

client:
  container_name: client
  build:
    context: ./client
    dockerfile: Dockerfile
  volumes:
    - './client:/usr/src/app'
    - '/usr/src/app/node_modules'
  ports:
    - '3000:3000'
  environment:
    - NODE_ENV=development
    - NODE_PATH=src

【问题讨论】:

  • 你可以在 network_mode: host 下运行它,然后它会像主机一样在你的网络上接收一个 IP
  • react 发出的请求通常来自浏览器而不是 docker 容器,除非您是 SSR,因为如果您正在请求外部资源,则会通过您的 IP 进行路由。您很可能遇到 CORS 问题,而不是 docker 问题
  • 我想过这一点,但 react 有一些东西可以代理你在开发中的请求。 (facebook.github.io/create-react-app/docs/…) @user1095118
  • @Mihai 我改为使用 network_mode 但它使用的是私有 IP 而不是我的公共 IP
  • @TiagoMartins 从你的容器外部看应该和你的主机一模一样(网络方面)。因此,如果您可以从您的主机连接到该 API,您也应该能够从您的容器连接。你检查过吗?

标签: docker docker-compose


【解决方案1】:

关于你的问题:容器可以使用我机器的公共地址吗?

是的,如果您不指定--net host,它甚至会这样做。您可以使用this image(或任何其他包含curl 的图像)轻松检查:

首先,在您的主机上运行:

curl -s ipinfo.io/ip

这将显示您当前的公共 IP 地址。

然后,运行容器:

docker run --rm appropriate/curl -s ipinfo.io/ip

它应该产生相同的 IP 地址。

不过,我对 React 一无所知,因此您的情况可能还有其他问题,但基本上这不应该是 Docker 问题。

【讨论】:

  • 我在容器中运行了该命令,它具有正确的公共 IP。我不知道为什么,但反应是使用私有 IP 来托管。感谢您帮助发现问题。
  • 没问题。 :) 我建议您编辑您的帖子以将问题缩小到 React,或者将其标记为已解决。
猜你喜欢
  • 2021-10-26
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 2021-03-28
  • 1970-01-01
  • 2018-01-15
相关资源
最近更新 更多