如何删除发送到 Docker 守护进程构建上下文的文件

Joe*_*goh 5 docker dockerfile

我在我的主目录中运行了这个命令:

docker build .
Run Code Online (Sandbox Code Playgroud)

在我知道发生了什么之前,它向 Docker 守护进程发送了 20 GB 文件。我的笔记本电脑上没有剩余空间。如何删除复制的文件?我找不到他们。

er-*_*han 6

运行docker build .命令时会发生什么:

  1. DockerfileDocker 客户端会查找与命令运行所在目录相同的文件。如果该文件不存在,则会抛出错误。
  2. Docker 客户端会查找名为.dockerignore. 如果该文件存在,Docker 客户端将在下一步中使用该文件。如果不存在,则不会发生任何事情。
  3. Docker 客户端制作一个tar名为build context. 默认情况下,它包含与Dockerfile. 如果文件中有一些ignore规则.dockerignore,Docker 客户端会排除ignore规则中指定的那些文件。
  4. Docker 客户端将build context名为Docker daemon或 的Docker 引擎发送给 Docker 引擎Docker server
  5. Docker 引擎build context动态获取并开始构建镜像,一步步在Dockerfile.
  6. 镜像构建完成后,build context发布。

因此,如果只需要所有构建上下文,您的构建上下文不会复制到您刚刚创建的映像中的任何地方。您可以通过运行以下命令检查图像大小:docker images。如果您看到一些未使用或不必要的图像,请使用docker rmi unusedImageName.

如果您的图像不需要构建上下文中的所有内容,我建议您使用.dockerignore规则来减小build context大小。排除图像不需要的所有内容。这样,构建过程会更短,您COPYADD看到Dockerfile.

例如,我使用这样的东西:

# .dockerignore
* # exclude everything
!build/libs/*.jar # include just what I need in the image
Run Code Online (Sandbox Code Playgroud)


Rob*_*ert 3

生成的图像可能正在使用该空间。找到并删除它:

docker images
Run Code Online (Sandbox Code Playgroud)

按列搜索size

然后删除它:

docker rmi <image-id>
Run Code Online (Sandbox Code Playgroud)

您还可以删除与 docker 相关的所有内容:

docker system prune -a
Run Code Online (Sandbox Code Playgroud)