在Dockerfile中有条件地暴露端口

hfyxw5xn  于 2023-05-16  发布在  Docker
关注(0)|答案(1)|浏览(198)

我尝试基于构建参数(DEBUG_ENABLED)在Dockerfile中公开调试端口。此映像最终会进入一个k8s pod,该pod位于一个集群上,该集群上有多个运行各种应用程序的pod。我试图暴露端口在所有的图像的基础上构建参数。
下面是我的Dockerfile:

ARG DEBUG_ENABLED=true
:
:
EXPOSE 8080
RUN if [ "$DEBUG_ENABLED" = "true" ] ; \
      then EXPOSE 8000 ; \
    else echo "debug is set to false"; \
    fi 
ENTRYPOINT ["catalina.sh", "run"]

我知道“EXPOSE”语句在RUN if...结构中不起作用。但有没有办法实现我的目标呢?

rur96b6h

rur96b6h1#

我也在寻找解决方案。
我知道EXPOSE只是某种图像文档。但我觉得这真的很有用

直接否

答案是NO
所以我必须为此创建2个(或更多)dockerfile

解决方法

也许从STDIN构建(由其他程序生成dockerfile)可以是一个解决方案。
但它真的不是那么直接有效
//这与动态创建dockerfile没有什么不同。
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#pipe-dockerfile-through-stdin
https://docs.docker.com/build/building/context/#text-files
https://docs.docker.com/engine/reference/builder/#environment-replacement:~:text=Dockerfile 通过STDIN

相关问题