不能将服务器上的Docker应用程序暴露给外部IP

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

我的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时,该应用程序不可用。

任何见解我做错了什么? 或者根本不做?

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

-P,–publish-all将所有暴露的端口发布到随机端口

你需要使用-p这是:

-p,–publish list将容器的端口发布到主机(默认[])

你也需要指定你的主机的端口。

所以,最后是:

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

PS也许你需要在后台运行你的容器,所以它是:

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

经过一番调查,Docker似乎并没有公开127.0.0.1 (aka localhost )端口,而是0.0.0.0端口。 在后者上制作Angular服务,使整个事情工作!

ng serve --host 0.0.0.0