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

时间:2017-05-05 15:19:25

标签: docker dockerfile

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

$ docker build -t "image-name"
Sending build context to Docker daemon 8.499 MB
...

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

4 个答案:

答案 0 :(得分:19)

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

尝试使用此Dockerfile构建:

FROM busybox

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

用以下内容构建:

docker build -t test .

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

docker run --rm -it test find /tmp/build

答案 1 :(得分:7)

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

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

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

printf 'FROM scratch\nCOPY . /' | DOCKER_BUILDKIT=1 docker build -f- -o context .

多次运行时,请记住使用rm -r context删除以前的导出。

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

printf 'FROM scratch\nCOPY . /' | DOCKER_BUILDKIT=1 docker build -f- -o- . > context.tar
mkdir context
archivemount context.tar context

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

答案 2 :(得分:1)

更新后的答案:自2017年以来,Docker建议使用COPY而不是ADD,加上@tlrobinson的评论,更简单的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/

答案 3 :(得分:0)

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

enter image description here

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