38

我最近在 Windows 10 上升级了我的 Docker Toolbox,现在我的卷挂载不再工作。我什么都试过了。这是当前的挂载路径:

volumes:
  - C:\Users\Joey\Desktop\backend:/var/www/html

我收到无效的绑定安装错误。

4

7 回答 7

26
  1. 使用 docker 设置共享 nfs 路径

在此处输入图像描述 2.执行以下命令

docker run --rm -v c:/Users:/data alpine ls /data
  1. 在 docker compose 文件中设置路径,如下所示 在此处输入图像描述

  2. 文件复制到 windows

在此处输入图像描述

于 2020-02-27T13:07:18.440 回答
21

利用:

volumes:
  - "C:/Users/Joey/Desktop/backend:/var/www/html"

将整个内容放在双引号中并使用正斜杠对我有用。我在 Windows 10 中通过 WSL2 使用 Linux 容器在 Windows 10 上

这个答案来自 Spenhouet 给出的here

于 2021-05-14T06:52:24.087 回答
10

我想你必须设置COMPOSE_CONVERT_WINDOWS_PATHS=1,看这里

Docker Machine 应该自动完成:https ://github.com/docker/machine/pull/3830

于 2016-12-27T04:53:31.537 回答
4

我遇到了同样的问题(我正在使用 Docker Desktop)。

我的步骤是:

1)将您的文件夹放在驱动器“C”下

2)在Docker Desktop中打开“设置”->“共享驱动器”->“重置凭据”->选择驱动器“C”->“应用”

3)打开终端并运行(如Docker Desktop建议的那样):
docker run --rm -v c:/Users:/data alpine ls /data

4)在以下位置打开您的docker-compose.yml和更新路径-volumes

volumes:
  - /data/YOUR_USERNAME/projects/my_project/jssecacerts:/usr/lib/jvm/java-1.8-openjdk/jre/lib/security/jssecacerts/

5)重启docker容器

于 2019-04-19T15:29:37.673 回答
3

这个解决方案对我有用,在 docker-compose.yml :

    volumes:
      - c/Users/Cyril/django:/mydjango

(带有 WSL2 和 Docker 桌面的 Windows 10)

于 2021-07-26T19:49:44.500 回答
2

看来您正在使用位于C:\Usersdir 内的绝对路径,如果您正在使用,这对我也不起作用,Docker-Toolbox请参见下文。

概述

转发 section 中的./相对路径volumes将自动解析docker-compose到包含docker-compose.yml文件的目录(例如,如果您的项目在%UserProfile%/my-projectthen ./:/var/www/htmlgets /c/Users/my-name/my-project:/var/www/html)。

问题是目前(使用DockerToolbox-19.03.1)只有/c/Users目录与虚拟机共享(工具箱将docker自己置于虚拟机中,这意味着它无法访问您的文件系统,除了挂载的共享目录)。

结论

所以,基本上把你的项目放在那里(C:\Users\YOUR_USER_NAME)应该可以./工作。但即使这样对我也不起作用,我们最终得到了以下_prepare.sh脚本:

#!/bin/bash

VBoxManage='/c/Program Files/Oracle/VirtualBox/VBoxManage'

# Defines variables for later use.
ROOT=$(dirname $0)
ROOT=$(cd "$ROOT"; pwd)
MACHINE=default
PROJECT_KEY=shared-${ROOT##*/}

# Prepares machine (without calling "docker-machine stop" command).
#
if [ $(docker-machine status $MACHINE 2> /dev/null) = 'Running' ]; then
    echo Unmounting volume: $ROOT
    docker-compose down
    docker-machine ssh $MACHINE <<< '
        sudo umount "'$ROOT'";
    '
    "$VBoxManage" sharedfolder remove $MACHINE --name "$PROJECT_KEY" -transient > /dev/null 2>&1
else
    docker-machine start $MACHINE
fi
eval $(docker-machine env $MACHINE)

set -euxo pipefail
"$VBoxManage" sharedfolder add $MACHINE --name "$PROJECT_KEY" --hostpath "$ROOT" -automount -transient


docker-machine ssh $MACHINE <<< '
    echo Mounting volume: '$ROOT';
    sudo mkdir -p "'$ROOT'";
    sudo mount -t vboxsf -o uid=1000,gid=50 "'$PROJECT_KEY'" "'$ROOT'";
'

docker-compose up -d
docker-machine ssh $MACHINE
bash

用法:

  • 将它的副本放在每个项目的docker-compose.yml文件旁边。
  • 每次打开系统时运行它(只需双击它或它的快捷方式)。
  • 完毕!即使您的项目在另一个驱动器中(远离并在C:\Usersdir 之外),相对路径现在也应该可以工作。

笔记:

  • 稍加编辑,它应该可以docker-compose在不需要的情况下工作。
  • 考虑运行docker system prune以释放磁盘空间(或简单地添加docker system prune --force到上述脚本,在mount命令后的新行上)。
于 2020-02-05T07:39:44.573 回答
1

如果您使用的是新的 Docker WSL2 后端,则某些驱动器可能不会安装在任何 WSL 中(因此 Docker 也无法看到它们)。例如,D: 或 E: 或 USB 驱动器。看

要排除此问题,请尝试wsl从命令行运行 docker-compose。

于 2021-04-22T01:30:00.463 回答