WSL 上的 Dockerfile VOLUME 命令行为不同
Dockerfile VOLUME command behavior different on WSL
我已经设置 docker 以使用 WSL 2 (运行ning Ubuntu 20.04),遵循 this tutorial。
从 Docker 文件构建图像时,我遇到了行为差异。
我的示例 Docker 文件包含以下步骤:
FROM busybox
VOLUME /foo
RUN touch /foo/bar.txt
在我的 linux 机器 (Fedora 33) 上 运行ning docker build
时,一切正常。当从我的 WSL 机器 运行ning 时,我收到以下错误:
> [2/2] RUN touch /foo/bar.txt:
#5 0.221 touch: /foo/bar.txt: No such file or directory
似乎 VOLUME
命令没有 运行(失败步骤是 2/2 而不是 3/3)。我找不到有关此行为差异的任何文档。有人熟悉这些差异吗?有什么办法可以避免它们吗?
Docker 使用的版本 -
在 Linux 本机 (Fedora 33) 上:
$ docker version
Client: Docker Engine - Community
Version: 20.10.5
API version: 1.41
Go version: go1.13.15
Git commit: 55c4c88
Built: Tue Mar 2 20:19:16 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.5
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 363e9a8
Built: Tue Mar 2 20:16:56 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.4
GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc:
Version: 1.0.0-rc93
GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
docker-init:
Version: 0.19.0
GitCommit: de40ad0
在 WSL 2 (Ubuntu 20.04) 上:
$ docker version
Client: Docker Engine - Community
Cloud integration: 1.0.9
Version: 20.10.5
API version: 1.41
Go version: go1.13.15
Git commit: 55c4c88
Built: Tue Mar 2 20:17:50 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.5
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 363e9a8
Built: Tue Mar 2 20:15:47 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.3
GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc:
Version: 1.0.0-rc92
GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
docker-init:
Version: 0.19.0
GitCommit: de40ad0
两台机器的区别在于 WSL 机器启用了 BuildKit 而 Linux 机器没有。
BuildKit doesn't apply the VOLUME
command during build,因此如果目录不存在则不会创建该目录。
“正确”的解决方案是在使用前直接使用 mkdir
创建目录。如果那不可能,另一种解决方案是禁用 BuildKit(通过执行 these instructions 的相反操作)。
我已经设置 docker 以使用 WSL 2 (运行ning Ubuntu 20.04),遵循 this tutorial。 从 Docker 文件构建图像时,我遇到了行为差异。 我的示例 Docker 文件包含以下步骤:
FROM busybox
VOLUME /foo
RUN touch /foo/bar.txt
在我的 linux 机器 (Fedora 33) 上 运行ning docker build
时,一切正常。当从我的 WSL 机器 运行ning 时,我收到以下错误:
> [2/2] RUN touch /foo/bar.txt:
#5 0.221 touch: /foo/bar.txt: No such file or directory
似乎 VOLUME
命令没有 运行(失败步骤是 2/2 而不是 3/3)。我找不到有关此行为差异的任何文档。有人熟悉这些差异吗?有什么办法可以避免它们吗?
Docker 使用的版本 -
在 Linux 本机 (Fedora 33) 上:
$ docker version
Client: Docker Engine - Community
Version: 20.10.5
API version: 1.41
Go version: go1.13.15
Git commit: 55c4c88
Built: Tue Mar 2 20:19:16 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.5
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 363e9a8
Built: Tue Mar 2 20:16:56 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.4
GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc:
Version: 1.0.0-rc93
GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
docker-init:
Version: 0.19.0
GitCommit: de40ad0
在 WSL 2 (Ubuntu 20.04) 上:
$ docker version
Client: Docker Engine - Community
Cloud integration: 1.0.9
Version: 20.10.5
API version: 1.41
Go version: go1.13.15
Git commit: 55c4c88
Built: Tue Mar 2 20:17:50 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.5
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 363e9a8
Built: Tue Mar 2 20:15:47 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.3
GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc:
Version: 1.0.0-rc92
GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
docker-init:
Version: 0.19.0
GitCommit: de40ad0
两台机器的区别在于 WSL 机器启用了 BuildKit 而 Linux 机器没有。
BuildKit doesn't apply the VOLUME
command during build,因此如果目录不存在则不会创建该目录。
“正确”的解决方案是在使用前直接使用 mkdir
创建目录。如果那不可能,另一种解决方案是禁用 BuildKit(通过执行 these instructions 的相反操作)。