【问题标题】:Running Docker on WSL not executing "RUN" instruction, nor building properly在 WSL 上运行 Docker 未执行“RUN”指令,也未正确构建
【发布时间】:2020-12-13 21:52:43
【问题描述】:

我已安装 Docker Desktop,并按照以下指南设置所有内容以使用 WSL。

https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly

起初尝试构建映像时,我收到以下错误。 命令:“docker build -t hello。”

我通过将它放在我的控制台中解决了这个问题:

export DOCKER_BUILDKIT=0
export COMPOSE_DOCKER_CLI_BUILD=0

我现在可以成功构建/运行我的 docker 镜像了:

我将“测试”输出到我的控制台,但问题是没有创建 txt 文件。应该是因为我得到了一个输出并且“cat”正在从文件中读取,但它没有出现在我运行图像的文件夹中?我也无法在其他任何地方找到它。有什么建议吗?

【问题讨论】:

  • Dockerfile 在容器内创建helloWorld.txt,而不是在您的本地机器上(或在主机上不直接可见)。您是否在容器内查找该文件?

标签: docker docker-compose dockerfile windows-subsystem-for-linux


【解决方案1】:

您的 Dockerfile 在容器本身内创建 helloWorld.txt 文件,它不会在您的本地文件系统上可见。如果您已构建映像并标记为 hello,则可以通过以下方式将 shell 放入系统:

docker run -it hello:latest /bin/bash

这会给你一个 bash shell 进入你应该能够查看输出的机器:

$ docker run -it hello:latest /bin/bash
root@88a2b4c7d88e:/# ls
bin  boot  dev  etc  helloWorld.txt  home  ...

【讨论】:

  • 非常感谢!你的解释真的很有帮助。出于好奇,如果我想在运行图像时在该文件夹中本地创建一个文件,我该怎么做?还是一开始就有可能?
  • 不客气!这绝对是可能的。您可以在运行时将目录从主机挂载到容器,以便它们共享一个或多个目录。例如,添加-v $PWD:/home 会将当前目录挂载到容器内的/home(如果您在macOS/linux 系统上):docker run -it -v $PWD:/home hello:latest /bin/bash。如果您运行ls /home,您应该会看到并修改运行 docker 命令的相同文件。有关 Docker 卷的更多详细信息here
  • 非常感谢!我觉得有点愚蠢,因为没有意识到事情发生在容器内部并且在这个意义上不会直接影响您的系统。我今天刚开始学习docker,应该很明显,但是我想太多,让自己觉得有问题,因为我没有看到文件出现。哈哈。再次非常感谢!哦,我正在 Windows 上运行 WSL shell,因为我不想将 Linux 作为我的主要操作系统,而且我读到 docker 在纯粹从 Windows 运行时有很多问题。
  • 当然,这完全可以理解。容器很复杂,当您第一次了解容器(包括我自己)时,对大多数人来说这是一个陌生的概念。
猜你喜欢
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 2020-02-02
  • 2017-09-13
  • 1970-01-01
  • 2020-08-10
  • 2022-11-23
  • 2020-08-21
相关资源
最近更新 更多