docker 容器中的 Web 服务器无法通过互联网访问

docker 容器中的 Web 服务器无法通过互联网访问

我一直在读:https://docs.docker.com/engine/userguide/networking/#user-defined-networks

我已经创建了自己的网络(docker network create --driver bridge devils_network):

441be50f3792        bridge              bridge              local
0d73f7c6fe00        devils_network      bridge              local
8e189dda9fef        host                host                local
5ebca4a1e514        none                null                local

我这样运行容器:

docker run -it -d -v ~/dockervolume/deus:/srv/www --name deus --hostname deus --network=devils_network -p 80:8080 karl/node

并在dockerfile中公开端口8080:

EXPOSE  8080

我已将终端会话附加到容器并检查容器以确保 Web 服务器已启动并正在运行:

root        17  0.0  0.1   4508   660 ?        S    22:46   0:00 sh -c NODE_PATH="$(pwd)" NODE_ENV=production node hello_world
root        19  0.0  4.3 882896 22004 ?        Sl   22:46   0:00 node hello_world

Web 服务器正在使用 Docker 容器内的端口 8080。

我在 DigitalOcean droplet 上运行。如果我直接在主机上启动服务器而不是通过 docker 容器,它就可以正常工作。

答案1

  1. 您需要将映射 -p 80:8080 反转为 -p 8080:80 第一个端口在主机上,第二个端口在容器上。
  2. 在您的工作/家庭网络上,确保在您的路由器/fw 中将端口 8080 重定向到您的 docker 主机端口 8080。

这应该可以工作:这是我对 nginx 容器执行的相同步骤:

docker network create --driver bridge devils_network
4320854ef67c5489848c1e1f14ffaf4d65183c5e3fac5f655c038bb15aa50df7  

docker run -it -v ~/dockervolume/deus:/usr/share/nginx/html --name deus --hostname deus --network=devils_network -p 8080:80 ajnouri/nginx
root@deus:/# 

复制了索引.php文件到〜/ dockervolume / deus

并从我的手机上浏览了我的公共IP:

在此处输入图片描述

答案2

哎呀。我之前在我的 Node.js 应用程序中使用过以下内容:

const hostname = '127.0.0.1';
const port = 8080;

我将其改为:

const hostname = '0.0.0.0';
const port = 8080;

现在它正常工作了。我之所以使用它,127.0.0.1是因为我习惯使用反向代理 (HAProxy) 来处理这个问题。但是我希望 docker 容器直接连接到互联网,而不是通过反向代理。

相关内容