【问题标题】:Is it possible to show the `WORKDIR` when building a docker image?构建 docker 映像时是否可以显示“WORKDIR”?
【发布时间】:2016-10-13 10:39:43
【问题描述】:

我们在构建 docker 镜像时遇到了 WORKDIR 的问题。是否可以打印WORKDIR的值?

我们试过了:

ECHO ${WORKDIR}

但是没有这样的指令ECHO

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    在构建过程中,Docker 没有内置方式来打印WORKDIR。您可以检查图像/图层的最终工作目录:

    docker image inspect {image-name} | jq '.[].Config.WorkingDir'
    

    可以通过打印 shell 默认工作目录来查看 Linux 容器构建步骤 workdir:

    RUN pwd
    

    或者shell经常将工作目录存放在PWD环境变量中

    RUN echo "$PWD"
    

    如果您使用的是较新版本的 dockers BuildKit,则需要使用 --progress=plain 启用标准输出

    docker build --progress=plain . 
    

    【讨论】:

    • 尝试了RUN pwdCMD pwd,它在构建图像时不会在控制台中打印任何内容。它只打印到容器的控制台。
    • 您是否使用 docker 以外的工具来构建映像?或者可能使用-q 或在 docker 中获取缓存构建?
    • 我用docker build,也试过--no-cache标志
    • @Matt 我认为它不适用于 BuildKit(仅执行的命令是 printend,而不是输出)。
    • @Wirone 谢谢。你能确认修复吗?我的 docker 实例显然陷入了黑暗时代
    【解决方案2】:

    docker build 命令似乎最近发生了一些变化,它在构建过程中隐藏了stdout

    简而言之,使用DOCKER_BUILDKIT=0 docker build 来恢复“旧”行为。

    (reference)

    【讨论】:

      【解决方案3】:

      如果我使用docker-compose up,则不会在我的 IDE 控制台中打印 RUN。 但是 CMD 可以。所以试试

      CMD pwd

      如果图像中有 python,这也应该有效

      CMD ["python", "-c", "import os;print(os.getcwd())"]

      请注意,只有一个,最后一个CMD命令会在“容器运行”阶段执行。所有其他人都将被默默地忽略。另一方面,有一个标准的管道解决方法:

      CMD pwd && ls

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-08
        • 2020-06-05
        • 2017-12-21
        • 2021-05-29
        • 1970-01-01
        • 1970-01-01
        • 2018-11-24
        • 1970-01-01
        相关资源
        最近更新 更多