DockerComposeを使用してファイルをコンテナーにコピーする


100

私が持っているDockerfile、私は罰金を作品コンテナに(内容の)既存のディレクトリをコピーする場所を:

Dockerfile

FROM php:7.0-apache
COPY Frontend/ /var/www/html/aw3somevideo/
COPY Frontend/ /var/www/html/

RUN ls -al /var/www/html
RUN chown -R www-data:www-data /var/www/html 
RUN chmod -R 755 /var/www/html 

dockerexecを使用したディレクトリリストのスクリーンショット

しかし、私がdocker-compose.ymlファイルを使用するとき、ディレクトリだけがaw3somevideoあり、内部aw3somevideoには何もありません。

docker-compose.yml

 php:
    build: php/
    volumes:
      - ./Frontend/ :/var/www/html/
      - ./Frontend/index.php :/var/www/html/
    ports:
      - 8100:80

空のディレクトリリストのスクリーンショット

の機能がわからないのかもしれませんが、volumesその場合は、既存のファイルをdocker-compose.ymlファイル経由でコンテナにコピーする方法を教えてください。


5
volumes:docker-composeファイルからセクションを削除します。画像にはすでにデータが含まれています。volume:セクションはデータを上書きするだけです。また、現在のdocker-compose形式(バージョン2)に移動します。
バーナード

@Alkalinethxそれが本当に問題でした。しかし、なぜボリュームはディレクトリ全体をコピーしなかったのでしょうか。
TheDoctor 2016

この問題を解決するために、回答として返信します。
バーナード

回答:


89

与えられた

    volumes:
      - /dir/on/host:/var/www/html

/dir/on/host存在しない場合は、ホスト上に作成され、空のコンテンツがのコンテナにマウントされ/var/www/htmlます。/var/www/htmlボリュームをアンマウントするまで、コンテナ内に以前持っていたコンテンツにはアクセスできません。新しいマウントは古いコンテンツを隠しています。


最近のDockerバージョンでは、コンテンツが存在しなくvar/www/html//dir/on/hostも、のコンテンツがコピーされなくなる可能性はありますか?コンテナーを初めて起動するときに、docker-container内からホストにデータを強制的にコピーする方法はありますか?
タレーター2017

1
@Taratorはい、確かに、右側はもうホストにコピーされていません。答えを更新します。コンテナの起動時にコピーする方法については、起動コマンドを次のように上書きできますdocker run -v /dir/on/host:/hostdir php sh -c "cp -rp /var/www/html/* /hostdir && exec myapp"execPID1が割り当てられるように、を使用して最後のコマンドを呼び出すことを忘れないでください。これにより、myappが終了信号(たとえばCtrl-C)を確実に受信できるようになります。
バーナード

こんにちは、私はまた、ドッキングウィンドウ・コンと同じものにしようとしたがエラーを取得し、あなたはそれを見てくださいすることができます...よstackoverflow.com/questions/45573831/...
utkarsh31

ねえ、バーナード、あなたの答えでは、「右側がmyvolumeのような名前付きボリュームを指定するのか、ホスト上のパスを指定するのか」を参照します。ボリュームまたはホストパスのいずれかを指定し、それがrhsのコンテナーの場所にマップされるため、ここで「左手」を意味していませんか?Dockerが左右のファイルコピーをどのように管理し、どのように変更されるかについて話していることは承知しています。
チャーリーアレハート

@charliearehartその通りです。私は今その間違いを修正します。
バーナード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.