显示或列出生成上下文的Docker命令/选项

显示或列出生成上下文的Docker命令/选项,docker,dockerfile,Docker,Dockerfile,是否有命令/选项显示或列出发送到Docker守护进程以生成映像的上下文 $ docker build -t "image-name" Sending build context to Docker daemon 8.499 MB ... 通过在文件中指定模式,可以从构建上下文中排除文件和目录。我想,除了Docker在确定上下文时使用的任何其他利基规则之外,我正在寻找的内容相当于测试.dockrignore。唯一的方法是将当前目录添加到特定目录并列出它 尝试使用此Dockerfile生成: FR

是否有命令/选项显示或列出发送到Docker守护进程以生成映像的上下文

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

通过在文件中指定模式,可以从构建上下文中排除文件和目录。我想,除了Docker在确定上下文时使用的任何其他利基规则之外,我正在寻找的内容相当于测试
.dockrignore

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

尝试使用此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

更新答案:自2017年以来,Docker建议使用
COPY
而不是
ADD
,根据@tlrobinson的评论,更简单的Docker文件如下所示:

# 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/


上面的答案很好,但大多数情况下都有一个低技术的解决方案-
ncdu
。此实用程序将显示具有大小的漂亮的交互式树结构。它有一个选项,可以从文件中获取模式并将其从扫描中排除。所以你可以只做
ncdu-X.dockrignore
。你会得到这样的结果:


这与docker图像中的内容非常接近。一个警告是,如果在图像中添加点目录(如
.warn
),它将不会显示在
ncdu
输出中。

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

默认情况下不启用它,因此在调用
DOCKER build
命令之前,需要设置环境变量
DOCKER\u BUILDKIT=1

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

printf 'FROM scratch\nCOPY . /' | DOCKER_BUILDKIT=1 docker build -f- -o context .
运行多次时,请记住使用
rm-r上下文删除以前的导出

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

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

使用这两种方法,您可以使用
ncdu context

浏览结果。您可以通过在Dockerfile中包含
运行find/tmp/build
一步完成。对不起,我不知道Windows,但WSL应该安装这些GNU实用程序。我更新了答案,使用了
COPY
,但是
RUN
中的
find
命令行选项没有灵活性,除非使用ENTRYPOINT.:)我正是在寻找这个。这是一个很好的答案
ncdu
是预先安装的。这确实是一个有用的工具,但它不尊重
.Dockrignore
,这可能与问题有关。看起来
-X
选项不支持
中的白名单规则。Dockrignore
我也看不到它与黑名单项目有关(至少在今天从自制安装的ncdu上)这不是一个好的答案:
ncdu
-X
选项没有遵循docker的
。DockerInore
文件语法和规格很好的答案,而不是重定向到
上下文。tar
您也可以将输出通过管道传输到
tar-tv
,这样您就不必处理临时文件和目录。