2015-11-04 187 views
2

我正在为将使用nginx-proxy容器的网络应用程序开发Dockerfile。它也有一个CLI做域名的东西(创建/修改数据库,运行清理作业等)

在99%的情况下,当我启动一个容器时,我想使用webapp。我在Dockerfile中有一个EXPOSE 3000,这对NGINX代理非常有用。 Nginx代理使用docker-gen,它监听docker的startstop事件,并根据暴露的端口重新构建NGINX配置。

当我想运行一个基于CLI的容器时,问题出现了。我不要想要EXPOSE 3000。我想解开端口3000,所以NGINX-proxy不会更改NGINX配置。

这可能从docker run?阅读文档没有给出任何清晰度,并尝试docker run -p ''没有工作(我得到了docker: No port specified: ::<empty>.错误)。

说实话,这是一个挑剔的挑剔,并不是什么大不了的。我可以取出Dockerfile中的EXPOSE 3000,只是在命令行上执行-p 3000。我只是喜欢把它放在Dockerfile中,所以默认情况下它是开启的,我只需在少数情况下关闭它就可以了。

我也知道我可以使用从第一个继承的第二个Dockerfile。

我只是好奇,如果有可能在我做docker run(或可能在docker-compose)时取消公开Dockerfile中公开的端口。

回答

1

据我所知现在不可能。您可以做的最好的事情也是使用-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 
+0

酷,是的。重新映射它仍然会导致问题。不过谢谢你的想法! –

+1

如果没有其他人有巧妙的解决方法,我会在几天内接受此答案。我也认为,根据我的测试和文档阅读,是否可以“不公开”发布端口的答案是否定的。 –

相关问题