2017-06-01 5 views
0

複数のサービスを開始して統合するためにDocker作成ファイルを設定しています。Dockerの非仮想フォルダをボリュームとして使用

version: '3' 
services: 
    db: 
    ... 
    volumes: 
    - ./data/mariadb:/var/lib/mysql 
    ... 
    solr: 
    ... 
    volumes: 
     - ./data/solr/:/opt/solr/server/solr/mycores 
    ... 

これを実行すると、すべてのnessessaryフォルダが、私はをドッキングウィンドウ-構成実行フォルダ内に作成されます。

問題1:このフォルダには一般的な権利はなく、ドッキングする人はすべての情報を保存/書き込みできず、コンテナはエラーをスローします。これらのフォルダに必要な権限(Windows、Linux)

第2のアプローチとして、ボリューム定義を使用してデータストレージを作成しました。

version: '3' 
services: 
    db: 
    ... 
    volumes: 
    - mariadb:/var/lib/mysql 
    ... 
    solr: 
    ... 
    volumes: 
     - solr:/opt/solr/server/solr/mycores 
    ... 
volumes: 
    mariadb: 
    solr: 

この設定では、ボリュームのデータフォルダが仮想マシン内に作成され、コンテナはすべてのデータを問題なく読み書きできます。しかし、WindowsのHyper-V環境ではフォルダが何とか隠されています。

問題2:このセクションのという名前のを、物理ドライブ(Windows、Linux)上のVM外の定義済みフォルダを指すように定義するにはどうすればよいですか。

答えて

0

問題1:このフォルダには一般的な権利はなく、ドッキングする人はすべての情報を保存/書き込みできず、コンテナはエラーをスローします。これらのフォルダに必要な権限(Windows、Linux)

ホストのディレクトリには、コンテナ内のユーザーが書き込むことができるように設定された許可ビットが必要です。/etc/passwdおよび/ etc/groupファイルが異なるため、コンテナ内およびホスト内のユーザー名とグループ名のマッピングが異なる場合があります。したがって、ホスト上のパーミッションを設定するときは、コンテナ内のユーザのuidとgidに基づいてパーミッションを設定する必要があります。

問題2:このセクションの名前付きボリュームは、物理ドライブ(Windows、Linux)上のVM外の定義済みフォルダを指すように定義するにはどうすればよいですか。

名前付きボリュームを使用しない場合は、ホスト上のディレクトリに対するアクセス許可を設定するための回避策はありません。ボリュームに名前が付いているのは、空であるか、作成されてコンテナに接続されているときに、画像のパーミッションと所有者(ディレクトリの内容とともに)に初期化されるからです。ホストボリューム(別名バインドマウント)には、この初期設定機能はありません。

特定のユースケースのパスではなく名前でボリュームを参照する必要がある場合は、問題を解決する可能性のあるlocal persistというプラグインがあります。私はこれが必要だったシナリオにまだ遭遇していないので、それがうまくいくかについてのフィードバックはありません。

関連する問題