显示或列出生成上下文的Docker命令/选项
是否有命令/选项显示或列出发送到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 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
,这样您就不必处理临时文件和目录。