gpt4 book ai didi

docker - WSL1、Docker Desktop、卷挂载始终为空

转载 作者:行者123 更新时间:2023-12-04 18:57:06 26 4
gpt4 key购买 nike

我关注了this setup完全地。在 Windows 10 上使用 Docker Desktop 运行 WSL1。此时我对 WSL2 不感兴趣。我没有 Insider Windows。

现在,我正在尝试使用卷启动容器,以便将容器的文件复制到卷中。根据official docs :

Populate a volume using a container

If you start a container which creates a new volume, as above, and the container has files or directories in the directory to be mounted (such as /app/ above), the directory’s contents are copied into the volume.



所以这应该是可能的,但我必须在这里遗漏一些非常基本的东西,因为它不起作用。

我试过 -v vol-name:/path/on/container -> 这会创建一个命名卷......某处。不知道在哪里,也不知道如何查看它。做 volume inspect vol-name显示不存在的路径,无论是在 WSL 中还是在 Docker 主机 (Windows) 中。我什至尝试安装 MobyVM,但它也不存在。

我试过 -v /c/full/path:/path/on/container -> 这会创建一个绑定(bind)类型的挂载。它是空的(按设计)。如果它把文件放在 /c/full/path 下,我会在 /path/on/container 下的容器中看到它们,但这不是我需要的。我需要用容器中的内容填充卷。根据我从文档中了解到的情况,我需要一个卷类型的挂载,而不是绑定(bind)类型的挂载。在这种情况下, -v选项强制绑定(bind)类型

我试过 --mount type=volume,source=/c/full/path,destination=/path/on/container -> 这将导致 error: docker: Error response from daemon: create /c/full/path: "/c/full/path" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path.不允许使用路径分隔符...

我读过一些关于密码中的特殊字符是一个问题并重置我的密码的内容
我已经阅读了/c/full/path 需要完全访问权限,并给予“每个人”完全访问权限

请帮忙

最佳答案

让我总结一下我认为您的设置是什么,然后我将尝试提供解决方案。

  • 您正在为 docker 引擎运行 docker desktop
  • 您正在通过安装在 WSL
  • 上的 docker cli 连接到 docker 桌面
  • 您正在尝试与正在运行的容器共享一个 windows 文件夹
  • 您已在 docker 桌面
  • 的设置中启用共享 C 盘

    我认为您链接到错误的路径,您提供的路径需要被 docker desktop 识别,记住在 windows 中运行,因此路径需要采用 c:/full/path 格式.

    因此,请尝试以下测试以测试您是否正确设置了所有内容
    ➜  cd /mnt/c
    ➜ mkdir -p full/path
    ➜ cd full/path
    ➜ pwd
    /mnt/c/full/path
    ➜ docker image pull alpine
    Using default tag: latest
    latest: Pulling from library/alpine
    Digest: sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d
    Status: Image is up to date for alpine:latest
    docker.io/library/alpine:latest
    ➜ date > foobar.txt
    ➜ cat foobar.txt
    Thu Feb 6 17:49:31 STD 2020
    ➜ docker run --rm -v c:/full/path:/full/path alpine cat /full/path/foobar.txt
    Thu Feb 6 17:49:31 STD 2020


    最后,您可以使用 wslpath 和 pwd 以 docker desktop 可以使用的形式获取当前目录。
    docker run --rm -v $(wslpath -w $(pwd)):/full/path alpine ls /full/path/

    希望这可以帮助

    关于docker - WSL1、Docker Desktop、卷挂载始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60088530/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com