如何在没有通过CLI选项显式设置端口的情况下公开EXPOSE中定义的端口?

时间:2016-09-15 15:55:27

标签: docker

Difference between "expose" and "publish" in docker这篇文章介绍了3种不同的公开端口选项:

  

如果您未指定[EXPOSE-p],则表示容器中的服务   除了从容器内部以外的任何地方都不能访问   本身。

     

如果EXPOSE是端口,则无法访问容器中的服务   从Docker外部,但从其他Docker容器内部。所以这   有利于集装箱间的沟通。

     

如果您EXPOSE-p是一个端口,则容器中的服务是   即使在Docker外也可以从任何地方访问。

如果我在Dockerfile中定义了EXPOSE并且我希望容器将这些端口公开给主机怎么办?

示例:

如果我有以下Dockerfile。

FROM node:6

# ...

CMD node ./dist/bin/server.js

EXPOSE 8001
EXPOSE 8002

我运行docker run,我想要映射设置为8001:80018002:8002

但是,我需要在不使用-p选项对端口值进行硬编码的情况下执行此操作。

用例:

从基于VM的部署系统迁移到基于Docker的部署系统。每个docker容器都在自己的VM中运行。因此,不会与其他服务发生冲突。

2 个答案:

答案 0 :(得分:0)

要映射到特定端口,就像您要求必须使用-p PORT:PORT选项一样。

另一种选择是使用-P发布所有端口,然后docker会将通常在32700范围内开始的端口随机分配给由映像定义的各种端口。

答案 1 :(得分:0)

通过一点解决了我的问题:

callable(getattr(obj,a):