将 docker 容器公开到互联网

Exposing a docker container to the internet

我使用 docker 在我的服务器上部署了一个幽灵博客平台。现在我想把它公开到互联网上,但我在这样做时遇到了一些困难。

我在我的路由器中打开端口 8000 并将其转发到端口 32769,这是分配给该容器的端口。在我的网络中使用端口 32769 我可以正常访问该网站,但是当我尝试从互联网访问它时它会出现 took too long to respond 错误。

本地IP+端口:http://10.0.0.140:32769/

Docker端口配置

端口测试器

路由器设置

这个 post 也被添加到 Super User 因为据说在那里会得到更好的回应。

假设您在 docker 中的应用程序现在正在端口 8000 上运行 您希望将您的应用程序公开到 Internet。 请求将是:互联网 -> 路由器 -> 物理计算机(主机) -> docker.

  1. 您需要将您的应用程序导出到您的主机,这可以通过 Dockerfile 中的 EXPOSE 8000 指令来完成。 该端口应该首先可以从您的主机访问,因此,当您将 docker 图像作为 docker 容器启动时,您应该添加 -p 参数,例如 sudo docker run -d -it -p 8000:8000 --name docker_contaier_name docker_image_name 从现在开始,您的 docker 应用程序可以在您的主机中访问,假设它是您的物理计算机。
  2. 从您的路由器转发端口到您的主机 这一次,您可能想按照您在问题中所做的那样做。
  3. 从 Internet 访问您的应用程序。 如果我没记错的话,ip地址10.0.0.140只是你电脑的局域网IP地址,不能从互联网上访问。 您只能通过互联网 IP 连接到您的应用程序,为此,您可以检查您的路由器以查看您的 WAN IP 地址是什么,该地址将由您的互联网服务提供商分配给您的路由器。或者使用“我的 IP 是什么”google

对我有用的,或多或少,是将 Apache2 设置为反向代理,将 Apache2 中的路径重定向到 Docker 容器的端口。这可能也可以用例如 NGINX 来完成。 通过这种方式,来自网络的流量将被代理到容器并返回到网络,我看到了 WordPress 站点。所以关于OP的问题,docker容器现在已经暴露在互联网上了。

但是 1:这仍然不能解释为什么如果我直接从网络访问它,我没有从 Docker 容器获得 return 流量。

但是 2:并非 WordPress 站点中的所有 url 都是正确的,但这似乎是 WordPress 问题而不是 Docker / 路由问题。