Dockerボリュームとバインドマウントは、ホストOS上のディレクトリをコンテナのファイルシステム内の場所にバインドするために使用されます。これらは通常、ディレクトリ全体をマウントするために使用されますが、個々のファイルをシンボリックリンクするためにも使用できます。
ホストからDockerへのシンボリックリンク
ディレクトリ全体のマウントは、構成ファイルのリスト全体を上書きする場合にうまく機能しますが、1つだけをターゲットにする場合は、単一ファイルのマウントを使用する必要があります。これは、同じディレクトリに複数のマウントを異なる場所からマウントする場合にも役立ちます。 Dockerを介して処理され、ホストとコンテナのファイルシステム間のブリッジを通過することを除けば、通常のLinuxシンボリックリンクとほとんど同じように機能します。
通常のDockerボリュームマウントでは、ターゲットのディレクトリにマウントする必要があります 、その中でボリュームがリンクされます。
docker volume create nginx-config docker run -d --name devtest --mount source=nginx-config,target=/etc/nginx nginx:latest
ただし、バインドマウントを使用する場合、ソースはディレクトリまたはファイルにすることができます。 ホスト上。ボリュームマウントはこれをサポートしていません。通常はボリュームマウントを使用しますが、単一のファイルをマウントする場合は、低レベルのバインドマウントを使用する必要があります。
これを行うには、フラグ--mount type=bind
を指定してコンテナーを実行できます。 、パスを指定すると個々のファイルをサポートします:
docker run -it --mount type=bind,source=/path/file.cfg,target=/etc/example/file.cfg nginx sh
または、Dockerボリュームを本当に使用したい場合は、マウントする予定のファイルだけでボリュームを作成し、コンテナー内の一時ディレクトリにマウントしてから、コンテナー内に実際のシンボリックリンクを作成できます(Dockerビルドスクリプトで) )ファイルとともに一時ディレクトリにリンクします。これは、バインドマウント全体よりもおそらく悪い解決策ですが、DockerボリュームAPIを介してデータを保存することはできます。