是否有一个命令/选项来显示或列出发送到Docker守护程序以构建映像的上下文?
$ docker build -t "image-name"
Sending build context to Docker daemon 8.499 MB
...
通过在.dockerignore
文件中指定模式,可以从构建上下文中排除文件和目录。我想我正在寻找的东西等于测试.dockerignore
以及Docker在确定上下文时使用的任何其他利基规则。
答案 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)