有条件地在 Dockerfile 中公开端口

A.R*_*K.S 5 debugging docker dockerfile

我正在尝试根据构建参数(DEBUG_ENABLED)公开 Dockerfile 内的调试端口。该映像最终进入集群上的 k8s 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"]
Run Code Online (Sandbox Code Playgroud)

我知道“EXPOSE”语句在构造中不起作用RUN if...。但有没有办法实现我想要做的事情?

yur*_*hen 0

我也在寻找解决方案。

我只知道EXPOSE某种图像文档。但我认为它真的很有用。

直接NO

看来答案是NO现在。

所以我必须dockerfile为此目的创建 2 个(或更多)。

解决方法

也许从 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=通过 STDIN 的 Dockerfile