最近、Windows 10でDocker Toolboxをアップグレードしましたが、ボリュームマウントが機能しなくなりました。私はすべてを試しました。現在のマウントパスは次のとおりです。
volumes:
- C:\Users\Joey\Desktop\backend:/var/www/html
無効なバインドマウントエラーが表示されます。
C:\Users
dir内にある絶対パスを使用しているようですが、Docker-Toolbox
を使用している場合は、これも機能しません。下記を参照してください。
./
相対パスをvolumes
セクションに転送すると、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
ディレクトリのみが仮想マシンと共有されることです(ツールボックスはVMに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
dirの外)にある場合でも、相対パスが機能するようになりました。注:
docker-compose
がなくても機能するはずです。docker system Prune
を実行してディスク領域を解放することを検討してください(または、上記のスクリプトのmount
コマンドの直後の新しい行でdocker system Prune --force
を追加します)。同じ問題に直面しました(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コンテナーを再起動します
これはサービスセクションですか?ボリュームセクションで必要になるため、削除した場合は削除してください。