docker集装箱中的Web服务器无法通过互联网到达

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

我创build了自己的networking( 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 

我已经附加了一个terminal会话的容器,并检查容器,以确保networking服务器启动并运行:

 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 

networking服务器正在使用docker集装箱内的端口8080。

我正在DigitalOcean液滴上运行。 如果我直接在主机上启动服务器,而不是通过Docker容器,则可以工作。

  1. 您需要反转映射-p 80:8080到-p 8080:80第一个端口在主机上,第二个端口在容器上。
  2. 在您的工作/家庭networking上,请确保在您的路由器/ fw中将端口8080redirect到您的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:/# 

复制一个index.php文件到〜/ dockervolume / deus

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

在这里输入图像说明

DERP。 我以前在我的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容器直接连接到互联网,而不是通过一个反向代理。