我一直在阅读: 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容器,则可以工作。
这应该工作:这是我用我的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容器直接连接到互联网,而不是通过一个反向代理。