构建docker镜像时是否可以显示`WORKDIR`?

问题描述 投票:0回答:7

我们在构建 docker 镜像时遇到了

WORKDIR
的问题。是否可以打印
WORKDIR
的值?

我们尝试过:

ECHO ${WORKDIR}

但是没有这样的指示

ECHO

docker dockerfile
7个回答
69
投票

Docker 没有内置方法可以在构建过程中打印

WORKDIR
。您可以通过
.Config.WorkingDir
输出中的
inspect
属性检查图像/图层的最终工作目录:

docker image inspect -f '{{.Config.WorkingDir}}' {image-name}

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

RUN pwd

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

RUN echo "$PWD"

如果

RUN
步骤之前已运行并已缓存,请添加
--no-cache
标志。 如果您使用带有 BuildKit 的较新版本的 docker,则需要使用
--progress=plain

启用构建中的标准输出
docker build --no-cache --progress=plain . 

17
投票

最近似乎对

docker build
命令进行了一些更改,它在构建过程中隐藏了
stdout

简而言之,使用

DOCKER_BUILDKIT=0 docker build
恢复“旧”行为。

参考


11
投票

您可以在 Dockerfile 中使用以下命令

RUN pwd && ls

使用 --progress=plain 运行构建

docker build -t <image-name-you-want-to-give> --progress=plain .

11
投票

您可以在构建步骤中检查目录的内容并使用类似的命令打印它

RUN ls
RUN ls ..

在 ubuntu 20.04.4 LTS WSL2 下,我必须将

--progress=plain
与调试模式和无缓存结合起来才能看到输出:

docker -D build --progress=plain --no-cache. 

2
投票

我将这一行添加到我的 dockerfile 中:

RUN pwd

要打印当前工作目录,然后使用以下命令构建映像:

docker compose build --no-cache <name of service> 2>&1 | tee build.log

这将以更详细的格式在终端中打印输出,并且还会将完整的日志记录到文件 build.log 中

如果您不使用 docker compose,我希望您能够仅使用 docker 命令执行类似的操作。


1
投票
如果我使用

docker-compose up

,则 
RUN 不会在我的 IDE 控制台中打印。 但 CMD 确实如此。所以尝试一下吧

CMD pwd

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

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

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

CMD pwd && ls


    


0
投票
您可以使用以下命令

RUN `echo ls`
    
© www.soinside.com 2019 - 2024. All rights reserved.