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
标志!