web-dev-qa-db-ja.com

ボリュームと同じようにバインドマウントをDockerfileに追加します

Dockefile内のボリュームを初期化するように、バインドマウントをdockerファイルに追加します。方法はありますか?

14
Mufeed

Dockerfileは、イメージの使用方法ではなく、イメージの作成方法を定義します。したがって、Dockerfileでバインドマウントを指定することはできません。代わりに docker-compose を使用してみてください。ディレクトリをマウントする簡単なdocker-compose.ymlは次のようになります。

version: '3.1'

services:
  mycontainer:
    image: myimage
    build: .
    volumes:
      - './path/on/docker/Host:/path/inside/container'  

build: .は、他の方法で画像を構築する場合はオプションですが、1つの方法ですべてを実行すると便利な場合があります。

docker-compose up -dでこれを実行します

21
boyvinall

他の答えが言うことに加えて:

バインドマウントはホストファイルシステムへのアクセスを提供するため、それらをイメージに埋め込むことは大きなセキュリティリスクになります。たとえば、Webサーバーのようなイメージを考えてみてください。ただし、実際にはbindは/etc/passwdおよび/etc/shadowその後、リモートサーバーに送信します。

または、マウントをバインドするもの/lib/ld-linux.soそしてそれを上書きし、システム全体を破壊します。

これらの理由により、バインドマウントをDockerfileに埋め込むことはできません。同様に、Dockerfileでホストポートマッピング、ホストデバイスアクセス、またはその他の同様の属性を指定することはできません。

8
larsks

簡単な答えはノーです。

Dockerイメージの基本的な設計原則は、移植性です。マウントされたフォルダはホストマシンで定義されるため、バインドマウントはホスト固有です。したがって、これはDockerイメージの移植性の要件と矛盾します。

1
yamenk