Docker命令/选项,用于显示或列出构建上下文

Ste*_*eve 27 docker dockerfile

是否有一个命令/选项来显示或列出发送到Docker守护程序以构建映像的上下文?

$ docker build -t "image-name"
Sending build context to Docker daemon 8.499 MB
...
Run Code Online (Sandbox Code Playgroud)

通过指定.dockerignore文件中的模式,可以从构建上下文中排除文件和目录.我想我正在寻找的东西等于测试.dockerignore除了Docker在确定上下文时使用的任何其他利基规则.

Ric*_*nco 24

唯一的方法是将当前目录添加到特定目录并列出它.

尝试使用此Dockerfile构建:

FROM busybox

RUN mkdir /tmp/build/
# Add context to /tmp/build/
COPY . /tmp/build/
Run Code Online (Sandbox Code Playgroud)

建立它:

docker build -t test .
Run Code Online (Sandbox Code Playgroud)

列出/ tmp/build中的所有文件和目录:

docker run --rm -it test find /tmp/build
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过在Dockerfile中包含`RUN find/tmp/build`来一步完成. (6认同)

小智 14

从版本 18.09 开始,Docker 可以选择使用BuildKit后端导出上下文数据。

默认情况下不启用它,因此您需要DOCKER_BUILDKIT=1在调用docker build命令之前设置一个环境变量。

如果当前目录中没有任何 Dockerfile,以下命令也可以工作。

printf 'FROM scratch\nCOPY . /' | DOCKER_BUILDKIT=1 docker build -f- -o context .
Run Code Online (Sandbox Code Playgroud)

当您多次运行时,请记住使用rm -r context.

您还可以将上下文数据作为存档获取,然后使用archivemount命令挂载:

printf 'FROM scratch\nCOPY . /' | DOCKER_BUILDKIT=1 docker build -f- -o- . > context.tar
mkdir context
archivemount context.tar context
Run Code Online (Sandbox Code Playgroud)

使用这两种方法,然后您可以使用 探索结果ncdu context

  • 很好,很好的答案️(对于不想安装 ncdu 的人:`du -m context | sort -n`)‍♂️️ (2认同)

小智 13

上面的答案很好,但是在大多数情况下,存在一个技术含量较低的解决方案- ncdu。该实用程序将显示具有大小的漂亮且交互式的树结构。它具有一个选项,它将从文件中提取模式并将其从扫描中排除。所以你可以做ncdu -X .dockerignore。您将获得如下内容:

在此处输入图片说明

这非常接近您将在Docker映像中获得的内容。请注意,如果在图像中添加点目录(如.yarn),则该目录不会显示在ncdu输出中。

  • 这不是一个好的答案:“ncdu”的“-X”选项不遵循 docker 的“.dockerignore”文件语法和规范 (6认同)
  • 看起来 `-X` 选项不支持 `.dockerignore` 中的白名单规则 (5认同)
  • 我也不认为它尊重黑名单项目(至少在今天从 Homebrew 安装的 ncdu 上)。 (3认同)
  • 确实是一个有用的工具,但它不尊重“.dockerignore”,考虑到这个问题,这可能是相关的。 (2认同)

Jes*_*sen 12

更新的答案:自 2017 年以来,Docker 建议使用@tlrobinson 的评论COPY代替ADD并使用,更简单的 Dockerfile 如下所示:

# debug and list the docker build context so that you can minimmize it
#
# usage:
#  docker build -f docker/context.Dockerfile -t test/buildcontext .
#
######################
FROM busybox

RUN mkdir /tmp/build/
# Add context to /tmp/build/
COPY . /tmp/build

# this last command outputs the list of files added to the build context:
RUN find /tmp/build/

Run Code Online (Sandbox Code Playgroud)