142

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 exec を使用したディレクトリ一覧のスクリーンショット

しかし、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

4

3 に答える 3

131

与えられた

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

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

于 2016-08-27T13:07:10.877 に答える
3

序文:この質問はかなり古いものであり、OP が回避策を見つけた可能性があることは認識していますが、正確な回答が表示されないため、OP によって提起された質問や関連する問題に対処することが適切だと感じました。

まず、名前付きボリュームバインド マウントの違いを明確にします。前者では、コンテナーの外部から、コンテナーの場所に既に存在するファイルを表示できますが、後者では表示されません。基本的に、バインド マウントは、xNIX でボリュームをマウントする場合と非常によく似た動作をします。つまり、デバイスがマウントされた後、既にマウント場所にあるファイルはすべてマスクされます。これはオーバーレイと考えてください。

次に、 を./Frontend/ :/var/www/html/指定するとバインド マウントが指定されます./Frontend。そのため、ホスト側を調べると、表示されるはずのファイルがすべてなくなっています。私があなたの最終目標を正しく理解していれば/var/www/html/、コンテナ外のまったく同じ場所からコンテナ内のファイルにアクセスできるようにする必要があります。その場合、次のように、名前付きボリュームとユーザー指定のマウント ポイントを使用することをお勧めします。

volumes:
  Frontend:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/var/www/html'

php:
    build: php/
    volumes:
      - Frontend:/var/www/html/

上記のリストがなくてもdriver_opts、名前付きボリュームは引き続き存在しますが、ホスト側の場所は Docker 領域になることに注意してください。これは通常/var/lib/docker/volumes、似たようなものです。正確な場所Mountsは、コマンドのセクションにありdocker inspectます。


これは、私の PiHole ラボ ホストでの同様のセットアップです。

docker-compose.yml (省略形)

volumes:
  etc-pihole:
  etc-dnsmasq.d:
  etc-unbound:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/home/dockeruser/ct5/etc-unbound'

services:
  pihole:
    container_name: asbuilt_ct5
    hostname: pb-asbuilt-5
    volumes:
         - './etc-pihole:/etc/pihole/'
         - './etc-dnsmasq.d:/etc/dnsmasq.d/'
         - 'etc-unbound:/etc/unbound/'

sudo docker inspectMountセクションのみの出力 (省略)

"Mounts": [
   {
      "Type": "bind",
      "Source": "/home/dockeruser/ct5/etc-dnsmasq.d",
      "Destination": "/etc/dnsmasq.d",
   },
   {
      "Type": "bind",
      "Source": "/home/dockeruser/ct5/etc-pihole",
      "Destination": "/etc/pihole",
   },
   {
      "Type": "volume",
      "Name": "ct5_etc-unbound",
      "Source": "/var/lib/docker/volumes/ct5_etc-unbound/_data",
      "Destination": "/etc/unbound",
      "Driver": "local",
   }
]

コンテナ ファイル リスト:/etc/unbound

root@pb-asbuilt-5:/# ls /etc/unbound
unbound.conf  unbound.conf.d  unbound_control.key  unbound_control.pem  unbound_server.key  unbound_server.pem

ホスト側のファイル リスト:/home/dockeruser/ct5/etc-unbound

[dockertest-srv1] > ls /home/dockeruser/ct5/etc-unbound
unbound.conf  unbound.conf.d  unbound_control.key  unbound_control.pem  unbound_server.key  unbound_server.pem
于 2021-09-06T23:49:05.743 に答える