Docker、ボリュームを読み取り専用としてマウント


106

私はDockerを使用していて、大きく変化する動的フォルダーをマウントしたいので(実行ごとにDockerイメージを作成する必要がなく、コストがかかりすぎます)、そのフォルダーを読み取り専用にしたい。フォルダーの所有者を他の誰かに変更しても機能します。ただし、アクセスchownが必要rootです。アプリケーションに公開しないほうがよいでしょう。

-vフラグを使用してマウントすると、指定したユーザー名がすべて表示されますが、Dockerイメージ内に非ルートユーザーを作成しましたが、Dockerを実行したユーザーとして所有者がいるボリューム内のすべてのファイルは、ユーザーIに変わりますコマンドラインから与えるので、読み取り専用のファイルやフォルダを作成できません。どうすればこれを防ぐことができますか?

また、を追加mustafa ALL=(docker) NOPASSWD: /usr/bin/dockerしたので、ターミナルを介して別のユーザーに変更できますが、それでもファイルには自分のユーザーのアクセス許可があります。


ここにコメントを残して、ユーザーがdockerコンテナーを実行できるようにすることは、完全なrootアクセス権を与えることと同じだと思っただけです。これは、Dockerドキュメントのセキュリティセクションにも記載されています。
Blackclaws 2018年

回答:


170

あなたは、ボリュームが読み取り専用にする必要があることを追加することによって指定することができます:roへの-vスイッチ:

docker run -v volume-name:/path/in/container:ro my/image

フォルダーはコンテナーでは読み取り専用になり、ホストでは読み取り/書き込みになることに注意してください。

2018編集

ボリューム使用に関するドキュメントによると、--mountスイッチを使用してボリュームをマウントする別の方法があります。これを読み取り専用で使用する方法は次のとおりです。

$ docker run --mount source=volume-name,destination=/path/in/container,readonly my/image

docker-compose

以下に、読み取り専用コンテナを指定する方法の例を示しますdocker-compose

version: "3"
services:
  redis:
    image: redis:alpine
    read_only: true

8
書き込みは許可されていますが、ホストに書き戻せませんか?それは素晴らしいでしょう
Ray Foss

9
ボリュームをまったく指定しないように思えます。
Alp

1
並べ替え... Dockerfile COPYを利用するためだけにイメージをビルドしたりdocker cp、シャットオフコンテナーで別のコマンドを使用したりするのは好きではありません。
Ray Foss

5
たぶん、詳細を提供してここにリンクするという新しい質問を作成できますか?
Alp

ドッカーコンポートで短い構文を使用することもできます。つまり、redis:alpine:ro
mb14

23

docker-compose

以下は、読み取り専用ボリュームを指定する適切な方法ですdocker-compose

version: "3.2" # Use version 3.2 or above
services:
  my_service:
    image: my:image
    volumes:
      - type: volume
        source: volume-name
        target: /path/in/container
        read_only: true
volumes:
  volume-name:

https://docs.docker.com/compose/compose-file/#long-syntax-3


2
それは確かに適切ですが、ここでは読み取り専用はボリュームではなく、コンテナーです。
КонстантинВан

これは私のためにのみ機能しますversion: "3.2"-おかげで:)
Davey

「バージョン3.2ファイル形式で追加されました。」うん
rybo111

3
また、- './my-file.txt:/container-readonly-file.txt:ro'下で行うこともできますvolumes- :ro最後に注意してください。
rybo111
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.