Dockerfile公开node.js图像的端口

时间:2017-05-06 13:41:34

标签: node.js docker dockerfile

我试图公开node.js图片的端口,但它没有公开外部端口:

FROM node:4-onbuild
ADD . /opt/app

EXPOSE 8000:8000

CMD ["npm", "start"]

只有当我在运行图像时声明端口时才能正常工作

docker run -p=8000:8000 node

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:3)

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

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

您将看到您仍然需要手动公开端口。 EXPOSE指令对于可能想知道容器期望公开的平台非常有用。例如,在OpenShift上,如果我部署了容器,则建议我公开端口8000。

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

docker run --net=host

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

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

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