首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Dockerfile卷命令在WSL上的行为不同

Dockerfile卷命令在WSL上的行为不同
EN

Stack Overflow用户
提问于 2021-03-18 00:43:31
回答 1查看 65关注 0票数 0

我已经设置了docker来使用WSL2(运行Ubuntu20.04),遵循this tutorial。在从Dockerfile构建镜像时,我遇到了行为上的差异。我的示例Dockerfile包含以下步骤:

代码语言:javascript
运行
复制
FROM busybox
VOLUME /foo
RUN touch /foo/bar.txt

在我的linux机器(Fedora33)上运行docker build时,一切正常。从我的WSL机器运行时,我得到以下错误:

代码语言:javascript
运行
复制
> [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)上:

代码语言:javascript
运行
复制
$ 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)上:

代码语言:javascript
运行
复制
$ 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-21 18:05:13

这两台机器的不同之处在于,WSL机器启用了BuildKit,而Linux机器没有. BuildKit doesn't apply the VOLUME command during build,因此如果目录不存在,则不会创建该目录。

“正确”的解决方案是在使用目录之前直接使用mkdir创建目录。如果这是不可能的,另一种解决方案是禁用BuildKit (通过与these instructions相反的方式)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66677498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档