如果我在Dockerfile中使用EXPOSE $ PORT,那么当我使用`docker run`的时候,我可以不使用这个端口吗?
我正在为将使用nginx代理容器的Web应用程序的Dockerfile工作。 它也有一个CLI做域名的东西(创build/修改数据库,运行清理工作等)
在99%的情况下,当我启动一个容器时,我想使用webapp。 我在EXPOSE 3000
中有一个EXPOSE 3000
,对NGINX代理来说非常好。 Nginx代理使用docker-gen ,它监听docker的start
和stop
事件,并根据暴露的端口重新构buildNGINXconfiguration。
问题出现在我想运行一个基于CLI的容器时。 我不想要EXPOSE 3000
。 我想解开端口3000,所以NGINX-proxy不会改变NGINXconfiguration。
docker run
可能吗? 阅读文档没有给出任何澄清,并试图docker run -p ''
没有工作(我有一个docker: No port specified: ::<empty>.
错误)。
老实说,这有点挑剔,这不是什么大不了的事情。 我可以将EXPOSE 3000
从EXPOSE 3000
取出,并在命令行上执行-p 3000
。 我只是喜欢它在Dockerfile中,所以它默认情况下,我只需要在less数情况下closures它,当我需要它。
我也知道,我可以使用从第一个inheritance的第二个Dockerfile。
我只是好奇,如果有可能取消发布端口文件中暴露的端口,当我做docker run
(或可能在docker-compose)。
据我所知,现在是不可能的。 你可以做的最好的事情是使用-P
选项将3000映射到一些随机端口,所以它不会与主容器实例冲突,例如
docker run -it -P <some-image>
这将导致下面的docker ps
main_container 0.0.0.0:3000->3000/tcp run_container 0.0.0.0:32769->3000/tcp