Dockerがファイルを追加した後、ファイルが見つかりません。

Dockerがファイルを追加した後、ファイルが見つかりません。

ADDを使用して圧縮ファイルをコンテナにローカルにコピーしようとしています。

RUN mkdir /root/foo
ADD foo.zip /root/foo/
UNZIP -o /root/foo/foo.zip

次に、コンテナをビルドして実行し、bashと入力します。

sudo docker run -it -p 8080:8080 tomcat bash

/root/foo/ ディレクトリに移動すると見つかりません。コンテナにディレクトリを作成してfoo.zipの内容を表示するにはどうすればよいですか?

ベストアンサー1

ホストディレクトリをデータボリュームとしてマウントする

-vフラグを使用してボリュームを作成するだけでなく、Dockerデーモンホストのディレクトリをコンテナにマウントすることもできます。

 $ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

このコマンドは、ホストディレクトリ/ src / webappを/ opt / webappのコンテナにインストールします。 /opt/webapp パスがコンテナイメージ内に既に存在する場合、/src/webapp をマウントすると既存のコンテンツが上書きされますが、削除しません。インストールが削除されると、コンテンツに再びアクセスできます。これは mount コマンドの期待される動作と一致します。

コンテナディレクトリは、常に/src/docsと同じ絶対パスでなければなりません。ホストディレクトリは絶対パスまたは名前の値にすることができます。ホストディレクトリの絶対パスを指定すると、Dockerはユーザーが指定したパスにバインドをインストールします。名前を指定すると、Dockerはその名前を使用して名前付きボリュームを作成します。

名前の値は英数字で始まる必要があり、その後にa-z0-9、_(アンダースコア)、。 (ピリオド)または-(ハイフン)です。絶対パスは/(スラッシュ)で始まります。

たとえば、/ fooまたはfooをホストディレクトリ値として指定できます。 /foo 値を指定すると、Docker はバインドマウントを生成します。 foo仕様を提供すると、Dockerは名前付きボリュームを作成します。

MacまたはWindowsでDocker Machineを使用している場合、DockerデーモンはOS XまたはWindowsファイルシステムへのアクセスを制限します。 Docker Machine は、/Users(OS X) または C:\Users(Windows) ディレクトリを自動的に共有しようとします。したがって、次のコマンドを使用してOS Xにファイルまたはディレクトリをマウントできます。

 docker run -v /Users/<path>:/<container path> ...

Windowsでは、次のコマンドを使用してディレクトリをマウントします。

 docker run -v /c/Users/<path>:/<container path> ...`

他のすべてのパスは、仮想マシンのファイルシステムから来ます。たとえば、VirtualBoxを使用して別のフォルダを共有する場合は、追加の作業を行う必要があります。 VirtualBoxの場合は、ホストフォルダをVirtualBoxの共有フォルダとして使用する必要があります。その後、Docker -vフラグを使用してインストールできます。

ホストディレクトリをマウントすることはテストに役立ちます。たとえば、コンテナ内にソースコードをインストールできます。次に、ソースコードを変更し、リアルタイムでアプリケーションに与える影響を確認します。ホストのディレクトリは絶対パスとして指定する必要があります。ディレクトリがない場合、Dockerは自動的にそのディレクトリを作成します。ホストパスの自動生成は廃止されました。

Dockerボリュームはデフォルトで読み取り/書き込みモードでマウントされますが、読み取り専用でマウントするように設定することもできます。

    $ docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

ここでは、同じ/ src / webappディレクトリをマウントしましたが、マウントが読み取り専用であることを指定するためにroオプションを追加しました。

マウント機能の制限により、ホストソースディレクトリ内のサブディレクトリを移動すると、コンテナからホストファイルシステムへのアクセスが提供される可能性があります。そのためには、悪意のあるユーザーがホストとそのインストールディレクトリにアクセスできる必要があります。

Note: The host directory is, by its nature, host-dependent. For this reason, you can’t mount a host directory from Dockerfile because built images should be portable. A host directory wouldn’t be available on all potential hosts.

おすすめ記事