我正在尝试使用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时,该应用程序无法使用。
对我做错的任何见解?或者根本不做?
答案 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