Dockerfile公开端口为node.js图像

我试图公开端口为node.js图像,但它不暴露在外面的端口:

FROM node:4-onbuild ADD package.json /tmp/package.json RUN cd /tmp && npm install RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/ WORKDIR /opt/app ADD . /opt/app EXPOSE 8000:8000 CMD ["npm", "start"] 

只有在运行映像时发布端口是可行的

docker运行-p = 8000:8000

EXPOSE指令仅是元数据 。 如果你检查:

https://docs.docker.com/engine/reference/builder/#expose

你会看到你仍然需要手动暴露端口。 EXPOSE指令对于可能想要知道容器期望公开的平台很有用。 例如,在OpenShift如果我部署你的容器,它会build议我公开端口8000。

如果您不想手动公开端口,请尝试以下操作:

 docker run --net=host 

这将绑定容器networking控制器到主机networking。 但请注意,这是一个安全问题,因为容器和主机之间没有隔离(对于TCPIP或UDP)。 这意味着你的容器可以尝试听主机上的任何端口! 一些容器像这样运行,例如,领事客户端:

https://hub.docker.com/_/consul/

这是一个聊天的聊天室,很多端口。 绑定到主机使得快速运行客户端变得更容易,但是除非绝对必要,否则我会避免这种方法。 不幸的是,你可能只需要习惯-p标志!