簡體   English   中英

使用 docker 在 Windows 上組合的卷綁定

[英]Volume binding using docker compose on Windows

我最近在 Windows 10 上升級了我的 Docker 工具箱,現在我的卷掛載不再起作用。 我已經嘗試了一切。 這是當前的掛載路徑:

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

我收到無效的綁定安裝錯誤。

  1. 使用 docker 設置共享 nfs 路徑

在此處輸入圖片說明 2.執行以下命令

docker run --rm -v c:/Users:/data alpine ls /data
  1. 在docker compose文件中設置路徑如下圖在此處輸入圖片說明

  2. 文件復制到窗口

在此處輸入圖片說明

我認為您必須設置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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM