不能将服务器上的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