2017-04-22 20 views
0

ドッカーコンポジションを使用してローカルディレクトリにドッキングコンテナのルートレベルに新しいディレクトリをマウントしようとしています。おそらく、これはかなり簡単なことです。ドッカーでボリュームをマウントできません

これは私のドッキングウィンドウ-コンファイルは次のようになります。

FROM php:5.6-apache 
RUN /contracts/provision/web.sh 

しかしI:ドッキングウィンドウ/ウェブでDockerfileは文字通り、この(私はもっと後に行う予定)のように見えます

version: '2' 
services: 
    web: 
    build: ./docker/web/ 
    expose: 
     - 80 
    volumes: 
     - .:/contracts 

web.shが見つからないというエラーが発生することがあります。さまざまなlsコマンドなどを私のDockerfileに置くと、コンテナに "contracts"というディレクトリが作成されていないことがわかります。 mntのような既存のものを試してみると、同じ結果が得られます。ディレクトリは空のままです。

しかし、docker inspectは明らかに取り付けられていることを示しています。

"Mounts": [ 
    { 
     "Type": "bind", 
     "Source": "/vagrant", 
     "Destination": "/contracts", 
     "Mode": "rw", 
     "RW": true, 
     "Propagation": "" 
    } 
], 

私は、Ubuntu 14.04を実行している不快なボックスでドッカーを作成しています。

私のテザーの終わりにはどんな助力も大変に感謝しています。ありがとう!

答えて

3

ボリュームはコンテナに接続され、コンテナはイメージから作成され、イメージはビルドコマンドから作成されます。あなたがビルドを実行している間は、ボリュームマウントは存在しないので、RUNコマンド中には表示されません。

ビルド時に、ボリュームをマウントする代わりに、COPYまたはADDこのディレクトリをイメージに追加します。あなたは、実行時にそれを行うと、その同じ場所の上にボリュームをマウントする場合、あなたはその場所の画像内に存在するものは何でも非表示になりますことを

COPY . /contracts 

注:あなたはRUNコマンドの前に、あなたのDockerfileでこのようなものが含まれます。したがって、永続的なボリュームの一部である必要があるデータからイメージの一部である必要があるコマンドとスクリプトはどの部分を分離し、ビルド時間スクリプトのみをイメージにコピーします。

実行中のコンテナでは、docker exec -it $container_id ls /contractsを試して、そこに期待どおりに存在するかどうか確認できます。

ディレクトリが存在しても空である場合は、VMまたはリモートホストにドッキング機能があり、別の環境からコマンドを実行している可能性があります。フォルダは、ドッカーホスト(VM)自体に存在してコンテナにマウントする必要があります。 Docker for WinとMac用Dockerには、特定のフォルダやドライブをVMに共有する設定があります。これは、必要な場所以外でビルドを行う場合に調整が必要な場合があります。 Linuxのファイル名に適用される大文字小文字の区別に注意してください。

+0

お返事ありがとうございます。私はこのようにプロビジョニングスクリプトを手に入れることができました。しかし、あなたが示唆したように 'docker exec -it $ container_id ls/contracts'を試しても、まだマウントされていません(その場所に" provision "ディレクトリだけが存在します)。私は今では放浪者なしでそれをネイティブに試みています。何か案は? – Raiden616

関連する問題