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:8001
,8002:8002
。
但是,我需要在不使用-p
选项对端口值进行硬编码的情况下执行此操作。
用例:
从基于VM的部署系统迁移到基于Docker的部署系统。每个docker容器都在自己的VM中运行。因此,不会与其他服务发生冲突。
答案 0 :(得分:0)
要映射到特定端口,就像您要求必须使用-p PORT:PORT选项一样。
另一种选择是使用-P发布所有端口,然后docker会将通常在32700范围内开始的端口随机分配给由映像定义的各种端口。
答案 1 :(得分:0)
通过一点bash解决了我的问题:
callable(getattr(obj,a):