我最近在Windows 10上升级了Docker Toolbox,现在我的卷安装不再有效了。我已经尝试了一切。这是当前的装载路径:
volumes:
- C:\Users\Joey\Desktop\backend:/var/www/html
我收到无效的绑定挂载错误。
答案 0 :(得分:15)
docker run --rm -v c:/Users:/data alpine ls /data
答案 1 :(得分:3)
我认为您必须设置COMPOSE_CONVERT_WINDOWS_PATHS=1
,请参阅here。
Docker Machine应该自动执行:https://github.com/docker/machine/pull/3830
答案 2 :(得分:3)
使用:
volumes:
- "C:/Users/Joey/Desktop/backend:/var/www/html"
将整个内容放在双引号中并使用正斜杠对我有用。 我在 Windows 10 上通过 WSL2 使用 Linux 容器在 Windows 10 上
这个答案来自 Spenhouet,给出了 here。
答案 3 :(得分:2)
似乎您使用的是C:\Users
目录中的绝对路径,如果您使用的是Docker-Toolbox
,这对我也不起作用。
将./
中的volumes
相对路径转发到docker-compose
会自动解析到包含docker-compose.yml
文件的目录中(例如,如果您的项目位于{{ 1}},然后%UserProfile%/my-project
得到./:/var/www/html
)。
问题在于,当前(使用/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:\Users
。docker-compose
以释放磁盘空间(或在docker system prune
命令之后的新行中,将docker system prune --force
添加到上述脚本中)。 答案 4 :(得分:0)
这是服务部分吗?现在,您确实需要在“音量”部分中将其删除,因此,如果有,只需将其删除。
答案 5 :(得分:0)
我遇到了同样的问题(我正在使用Docker Desktop)。
我的步骤是:
1)将文件夹放置在驱动器“ C”下
2)在Docker桌面中打开“设置”->“共享驱动器”->“重置凭据”->选择驱动器“ 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容器
答案 6 :(得分:0)
如果您使用的是新的 Docker WSL2 后端,则某些驱动器可能未安装在任何 WSL 中(因此 Docker 也将无法看到它们)。例如,D: 或 E: 或 USB 驱动器。见
要排除此问题,请尝试从 wsl
命令行运行 docker-compose。
答案 7 :(得分:0)
这个解决方案对我有用,在 docker-compose.yml 中:
CASE
WHEN UpdatedBy IS NOT NULL THEN COUNT(UPPER(UpdatedBy)) ELSE -1
END AS NoOfUpdatedRoles
(带有 WSL2 和 Docker 桌面的 Windows 10)