[英]Volume binding using docker compose on Windows
我最近在 Windows 10 上升級了我的 Docker 工具箱,現在我的卷掛載不再起作用。 我已經嘗試了一切。 這是當前的掛載路徑:
volumes:
- C:\Users\Joey\Desktop\backend:/var/www/html
我收到無效的綁定安裝錯誤。
我認為您必須設置COMPOSE_CONVERT_WINDOWS_PATHS=1
,請參見此處。
Docker Machine 應該自動執行: https : //github.com/docker/machine/pull/3830
采用:
volumes:
- "C:/Users/Joey/Desktop/backend:/var/www/html"
將整個內容放在雙引號中並使用正斜杠對我有用。 我在 Windows 10 上通過 WSL2 使用 Linux 容器在 Windows 10 上
這個答案是從Spenhouet給出這里。
我遇到了同樣的問題(我正在使用 Docker 桌面)。
我的步驟是:
1)將您的文件夾放在驅動器“C”下
2)在Docker Desktop中打開“設置”->“共享驅動器”->“重置憑據”->選擇驅動器“C”->“應用”
3)打開終端並運行(由Docker Desktop提出):
docker run --rm -vc:/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容器
看來您使用的是位於C:\\Users
目錄內的絕對路徑,這對我也不起作用,如果您使用的是Docker-Toolbox
請參見下文。
轉發volumes
部分中的./
相對路徑將通過docker-compose.yml
docker-compose
自動解析到包含docker-compose.yml
文件的目錄(例如,如果您的項目在%UserProfile%/my-project
則./:/var/www/html
獲取/c/Users/my-name/my-project:/var/www/html
)。
問題是目前(使用DockerToolbox-19.03.1
)只有/c/Users
目錄與虛擬機共享(工具箱將docker
本身放在 VM 中,這意味着它無法訪問您的文件系統,除了掛載共享-目錄)。
因此,基本上將您的項目放在那里( C:\\Users\\YOUR_USER_NAME
)應該使./
工作。 但即使這樣對我也_prepare.sh
,我們最終得到了以下_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
目錄,並且在C:\\Users
目錄之外),相對路徑現在也應該可以工作。筆記:
docker-compose
情況下工作。docker system prune
來釋放磁盤空間(或者簡單地將docker system prune --force
添加到上述腳本中,在mount
命令之后的新行中)。在 windows 10 上,通過在主機和掛載路徑的末尾添加最后一個/
解決了問題,如下所示:
volumes:
- '/c/work/vcs/app/docker/i18n/:/usr/app/target/i18n/'
沒有添加最后一個/
安裝路徑包含一些 docker 系統文件夾和符號鏈接。
我通過將 windows 路徑中的:
和 '' 替換為行首的/
來解決它。
像那樣:
volumes:
-/c/Users/Joey/Desktop/backend:/var/www/html
請注意: c
應該很小。
這是服務部分嗎? 你現在需要它在音量部分,所以如果你有它只是刪除它。
如果您使用的是新的 Docker WSL2 后端,則某些驅動器可能未安裝在任何 WSL 中(因此 Docker 也將無法看到它們)。 例如,D: 或 E: 或 USB 驅動器。 看
要排除此問題,請嘗試從wsl
命令行運行wsl
-compose。
這個解決方案對我有用,在 docker-compose.yml 中:
volumes:
- c/Users/Cyril/django:/mydjango
(帶有 WSL2 和 Docker 桌面的 Windows 10)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.