【问题标题】:Dockerfile in Windows 10 Linux Subsystem can't find file in current directoryWindows 10 Linux 子系统中的 Dockerfile 在当前目录中找不到文件
【发布时间】:2019-01-21 04:15:55
【问题描述】:

我有一个Dockerfile 最后一行:

CMD ["./watch.sh"]

这只是运行npm run watch。 在 Linux 中,一切正常。 但是在 Windows 10 Subsytem for Linux (WSL) 中,docker 会抛出一个错误,说它找不到文件。在另一个运行python <SOMEFILE.PY>Dockerfile 中,它还说找不到文件。

我已经在/etc/wsl.conf中设置了这些:

[automount]
root = /
options = "metadata"

我在我的用户名进程中运行 docker,并且已经将我的名字放在了 docker 组中。所以,我不以sudo 运行它。我的帐户中也有文件权限。

编辑: 我只是意识到,似乎我需要将docker 客户端作为sudo 运行。 在 Bash WSL 中,它似乎找不到驻留在 Windows 中的 docker 引擎,通过 tcp://localhost:2375 访问

$ sudo usermod -aG docker root
$ sudo docker build -t build-minimal .
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

当我在没有 sudo 的情况下运行 docker 时,它可以工作。

【问题讨论】:

  • 您是否尝试将文件 watch.sh 的路径替换为绝对路径...
  • 我不确定,但行尾字符可能是这里的问题。
  • 让我尝试使用绝对路径,尽管这不是一个长期的解决方案。至于行尾,应该不是。有点期待这是完全兼容的 linux 文件系统
  • @Mayur 你几乎猜对了:这是文件权限。我在下面详细说明了我的答案

标签: docker windows-subsystem-for-linux


【解决方案1】:

找到了! 答案是文件权限。

我使用 WSL 的目的是拥有完全兼容的 Linux 环境,但仍然能够使用 Windows 工作。因此,Linux 和 Windows 之间的文件共享必须正确完成。

我之前的错误只是从 Linux 到我的 Windows 文件(即 Python Flask 应用程序)的符号链接。这很糟糕,因为文件权限将无法正确存储/读取。

解决办法:

  • 代码/数据目录的符号链接位于 Windows 文件夹中
  • 如果是 git 存储库,请在 WSL 框中执行 git clone
  • 这将使文件权限正确保留,您仍然可以从 WSL/Windows 中完美访问它们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2017-10-01
    • 2020-11-19
    • 1970-01-01
    相关资源
    最近更新 更多