在Windows上使用docker compose进行卷绑定

时间:2016-12-26 16:49:54

标签: windows docker docker-compose docker-machine docker-toolbox

我最近在Windows 10上升级了Docker Toolbox,现在我的卷安装不再有效了。我已经尝试了一切。这是当前的装载路径:

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

我收到无效的绑定挂载错误。

8 个答案:

答案 0 :(得分:15)

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

enter image description here 2.执行以下命令

docker run --rm -v c:/Users:/data alpine ls /data
  1. 在docker compose文件中设置路径,如下所示 enter image description here

  2. 文件已复制到Windows

enter image description here

答案 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)