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
しかし、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
ファイルを使用して既存のファイルをコンテナーにコピーする方法を教えてください。
2017年4月に更新
元の答えを書いてから、振る舞いが変わりました。右側がmyvolume
のような名前付きボリュームを指定するか、/var/lib/myapp
のようなホスト上のパスを指定するかは一貫しています。例えば
volumes:
- /dir/on/Host:/var/www/html
/dir/on/Host
が存在しない場合、ホスト上に作成され、空のコンテンツが/var/www/html
のコンテナにマウントされます。以前の/var/www/html
にあったものはすべてアクセスできません。
----古い答え-----------
Docker-composeのvolumes:
セクションは、/var/www/html
ディレクトリにあるものを上書きします。
2つの主な状況があります。
ボリュームが存在します
その場合、ボリュームのコンテンツはdstディレクトリにあるものを覆い隠します。
例えば:
volumes:
- /dir/on/Host:/var/www/html
ボリュームが存在しません
myvolume
が存在しない場合(名前付きボリュームなど)、/ var/www/htmlのコンテンツが最初にボリュームにコピーされます
volumes:
- myvolume:/var/www/html
ケース2で、同じボリュームをコンテナに再度マウントしようとすると、ケース1に従います。
volumes:
- myvolume:/var/www/html
その場合(myvolumeがすでに作成されていると仮定)、/ var/ww/htmlのコンテンツは、myvolume
にあるものによって上書き(シャドウ)されます。
公式ドキュメントでは、詳細を説明しています https://docs.docker.com/compose/compose-file/#/volumes-volume-driver