88

docker-compose で docker-machine を使用しようとしています。ファイル docker-compose.yml には、次のような定義があります。

web:
  build: .
  command: ./run_web.sh
  volumes:
    - .:/app
  ports:
    - "8000:8000"
  links:
    - db:db
    - rabbitmq:rabbit
    - redis:redis

コマンドを実行docker-compose up -dしようとすると、エラーが発生するまですべてがうまくいきます。

コンテナーを開始できません

ローカル ボリュームがリモート マシンにマウントされていません。webapps のコードでローカル ボリュームをマウントするための推奨される戦略は何ですか?

4

12 に答える 12

5

2017 年 10 月以降、このトリックを実行する docker-machine 用の新しいコマンドがありますが、実行する前にディレクトリに何もないことを確認してください。そうしないと、失われる可能性があります。

docker-machine mount <machine-name>:<guest-path> <host-path>

詳細については、ドキュメントを確認してください: https://docs.docker.com/machine/reference/mount/

変更の PR: https://github.com/docker/machine/pull/4018

于 2018-02-13T23:23:18.963 に答える
4

docker-machine で rsync オプションを選択した場合は、次のdocker-machine ssh <machinename>ようにコマンドと組み合わせることができます。

rsync -rvz --rsh='docker-machine ssh <machinename>' --progress <local_directory_to_sync_to> :<host_directory_to_sync_to>

次のコマンド形式の rsync を使用し、HOST空白のままにします。

rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

( http://linuxcommand.org/man_pages/rsync1.html )

于 2016-07-18T23:18:48.833 に答える
1

最後に、Windows Docker Toolbox を v1.12.5 にアップグレードし、Oracle VM VirtualBoxマネージャーに共有フォルダーを追加してパス変換を無効にすることで、ボリュームを機能させ続ける方法を見つけました。Windows 10 以降を使用している場合は、新しい Docker for Windows を使用することをお勧めします。

最初のアップグレードの痛み:

  1. 最初に VirtualBox をアンインストールします。
    • うん、それは Android Studio のような他のツールの機能を壊す可能性があります。ありがとうDocker :(
  2. Docker Toolbox の新しいバージョンをインストールします。

Redis データベースの例: redis: image: redis:alpine container_name: redis ports: - "6379" volumes: - "/var/db/redis:/data:rw"

Docker クイックスタート ターミナルで ....

  1. run docker-machine stop default- VM が運搬されていることを確認します

Oracle VM VirtualBox Manager で ...

  1. defaultまたはコマンドライン経由 で VM に共有フォルダーを追加しました
    • D:\Projects\MyProject\db=>/var/db

docker-compose.yml...

  1. マッピングされた redis ボリューム:"/var/db/redis:/data:rw"

Docker クイックスタート ターミナルで ....

  1. 設定COMPOSE_CONVERT_WINDOWS_PATHS=0(Toolbox バージョン >= 1.9.0 の場合)
  2. を実行docker-machine start defaultして VM を再起動します。
  3. cd D:\Projects\MyProject\
  4. docker-compose up今すぐ動作するはずです。

に redis データベースを作成するようになりましたD:\Projects\MyProject\db\redis\dump.rdb

相対ホスト パスを避ける理由

無効な「\」文字が導入される可能性があるため、Windows ツールボックスの相対ホスト パスは避けました。相対パスを使用するほど良くはありませんdocker-compose.ymlが、少なくとも私の仲間の開発者は、プロジェクト フォルダーが別の場所にある場合でも、docker-compose.ymlファイルをハッキングする必要なく簡単に実行できます (SCM にとっては悪いことです)。

元の問題

参考までに...これは、以前のバージョンで問題なく機能していたきれいな相対パスを使用したときに発生した元のエラーです。私のボリュームマッピングは、以前は"./db/redis:/data:rw"

ERROR: for redis Cannot create container for service redis: Invalid bind mount spec "D:\\Projects\\MyProject\\db\\redis:/data:rw": Invalid volume specification: 'D:\Projects\MyProject\db\redis:/data

これは2つの理由で壊れます..

  1. D:ドライブにアクセスできません
  2. ボリューム パスに\文字 を含めることはできません
    • docker-composeそれらを追加し、それをあなたのせいにします!!
    • COMPOSE_CONVERT_WINDOWS_PATHS=0このナンセンスを止めるために使用します。

docker-compose.ymlVirtualBox を再度アンインストールして共有フォルダーをリセットする必要があるかもしれないので、追加の VM 共有フォルダー マッピングをファイルに記録することをお勧めします。

于 2017-01-06T04:41:18.857 に答える