无法将服务器上的docker app暴露给外部IP

时间:2017-11-23 09:49:07

标签: docker dockerfile iptables

我正在尝试使用docker容器在我的服务器上提供this CNIL/PIA应用程序。但是,我似乎无法正确绑定机器和容器的端口。

我的Dockerfile是

from node

maintainer Théophile Dano <theophile@fifty-five.com>

run mkdir -p /app
run chown node:node /app

workdir /app

copy . /app

user node

expose 4200

run npm i 

cmd ["./node_modules/.bin/ng", "server"]

启动我使用的容器的命令是:

docker run -i -t -P MY_SERVER_IP::4200 cnil-pia

在我的IP表中,我有(sudo iptables -t nat -L -n):

Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
DNAT       tcp  --  0.0.0.0/0            MY_SERVER_IP        tcp dpt:32768 to:172.17.0.2:4200

但是,当我尝试在浏览器中访问MY_SERVER_IP:4200时,该应用程序无法使用。

对我做错的任何见解?或者根本不做?

2 个答案:

答案 0 :(得分:1)

您在-P语句中使用docker run键,这意味着:

  

-P, - publish-all将所有公开的端口发布到随机端口

您需要使用-p

  

-p, - 发布列表将容器的端口发布到主机(默认为[])

此外,您还需要指定主机的端口。

所以,最后是:

docker run -it -p MY_SERVER_IP:4200:4200 cnil-pia

P.S。也许你需要在后台运行你的容器,所以它是:

docker run -d -p MY_SERVER_IP:4200:4200 cnil-pia

答案 1 :(得分:0)

经过一些调查后,似乎docker不会公开127.0.0.1(又名localhost)端口,而是公开0.0.0.0端口。使Angular服务于后者使整个事情发挥作用!

ng serve --host 0.0.0.0