私の状況は次のとおりです。
コンパイル中のドッカーイメージ/コンテナがあります。 Dockerfileを介して$ HOMEにいくつかのコンポーネントをインストールする必要があります(したがってイメージを作成するとき)。これらのコンポーネントの1つが存在するが~/.config
他のフォルダにもあるとします。
.config
Docker内のフォルダの上にマウントして、ホストシステムのホームフォルダにあるファイルを上書きできるようにしたいです。マウントされたフォルダにファイルを配置するたびに、コンテナに既に存在するファイルを上書きします。
理論的には、これが OverlayFS が行うことです。そうですか?サブディレクトリはDockerコンテナ内のディレクトリであり、親ディレクトリは私のホストコンピュータのディレクトリです。
これを達成する方法はありますか?
これまで、以下の関連トピックを見つけました。
https://serverfault.com/questions/841238/how-to-use-overlayfs-with-docker-volumes
欠点:答えはホストでoverlayfsを使用する方法だけを示していますが、子コンテナ/イメージディレクトリにアクセスすることは説明を必要とせず、厄介です。
-
欠点:Overlay-on / over-overlayオプションが無効になっているため、docker内でmount -t Overlayを使用すると最新のカーネルでは機能しません。
ホスト(つまり、dockerがファイルを保存するディレクトリ)でdockerファイルを直接操作する方法も考えてみましたが、少し厄介な感じがします。
これを行うには、VOLUME /home/user
Dockerfileの末尾に宣言します。その後、そのディレクトリに自分のファイルを見つけることができます/var/lib/docker/volumes/user/_data
。その後、そのディレクトリを下位層として使用し、別のフォルダを上位層として使用して、ホスト上にオーバーレイファイルを作成できます。それからdocker run --volume
。残念ながら、/var/lib
ディレクトリにアクセスするにはsu権限が必要です。また、間違ったレイヤーが変更されました。
別の方法は、単一のファイルをバインドマウントすることですが、これは少しハッキングすることができます。