GNU/Linux >> Linux の 問題 >  >> Linux

docker コンテナが Permission denied を要求するのはなぜですか?

docker-compose を使用して nfs マウント ポイントをボリュームとして共有すると、同様の問題が発生しました。この問題は次の方法で解決できました:

    docker-compose up --force-recreate

あなたが問題を見つけたとしても、これは他の誰かを助けるかもしれません.


共有ディレクトリのコンテナ内で拒否された権限は、この共有ディレクトリがデバイスに保存されていることが原因である可能性があります。デフォルトでは、コンテナはどのデバイスにもアクセスできません。オプション $docker run --privileged の追加 コンテナが all にアクセスできるようにします デバイスとカーネル呼び出しを実行します。 これは安全とは見なされません。

デバイスを共有するよりクリーンな方法は、オプション docker run --device=/dev/sdb を使用することです ( /dev/sdb の場合 は共有したいデバイスです)。

マニュアルページから:

  --device=[]
      Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc:rwm)

  --privileged=true|false
      Give extended privileges to this container. The default is false.

      By default, Docker containers are “unprivileged” (=false) and cannot, for example, run a Docker daemon inside the Docker container. This is because by default  a  container is not allowed to access any devices. A “privileged” container is given access to all devices.

      When  the  operator  executes  docker run --privileged, Docker will enable access to all devices on the host as well as set some configuration in AppArmor to allow the container nearly all the same access to the host as processes running outside of a container on the host.

以下のコメントから回答を得ました:docker container prompt Permission denied?

man docker-run 適切な答えを与える:

<ブロック引用>

SELinux などのラベル付けシステムでは、コンテナーにマウントされたボリューム コンテンツに適切なラベルを配置する必要があります。ラベルがないと、セキュリティ システムによって、コンテナー内で実行されているプロセスがコンテンツを使用できなくなる可能性があります。デフォルトでは、Docker は OS によって設定されたラベルを変更しません。

コンテナー コンテキストでラベルを変更するには、2 つのサフィックス :z または :Z のいずれかをボリューム マウントに追加できます。これらのサフィックスは、共有ボリューム上のファイル オブジェクトのラベルを変更するよう Docker に指示します。 z オプションは、2 つのコンテナーがボリューム コンテンツを共有することを Docker に通知します。その結果、Docker はコンテンツに共有コンテンツ ラベルを付けます。共有ボリューム ラベルにより、すべてのコンテナがコンテンツを読み書きできるようになります。 Z オプションは、非共有の非公開ラベルでコンテンツにラベルを付けるよう Docker に指示します。現在のコンテナのみがプライベート ボリュームを使用できます。

例:

  docker run -it --name oracle_install -v /root/database:/tmp/install/database:z ...

もう 1 つの理由は、UID/GID との不一致です。これは、多くの場合、ルートとしてマウントを変更できますが、コンテナー ユーザーとしては変更できません

UID を設定できるため、ubuntu として実行されている ubuntu コンテナーの場合は、:uid=1000 を追加する必要がある場合があります。 (id -u で確認してください) ) またはユースケースに応じて UID をローカルに設定します。

<ブロック引用>

uid=値とgid=値

ファイルシステム内のファイルの所有者とグループを設定します (デフォルト:uid=gid=0)

この tmpfs の例を含む良いブログがここにあります

docker run \
       --rm \
       --read-only \
       --tmpfs=/var/run/prosody:uid=100 \
       -it learning/tmpfs

http://www.dendeer.com/post/docker-tmpfs/


Linux
  1. 移動の許可が拒否された場合、Mv(1)がオブジェクトをコピーするのはなぜですか?

  2. なぜ`exit&`が機能しないのですか?

  3. Dockerの概要

  1. UbuntuでDocker権限拒否エラーを修正する方法

  2. Dockerコンテナを終了する方法

  3. なぜ誰もがDockerを使用しているのですか?

  1. 「docker images」コマンド エラー – 「許可が拒否されました」

  2. 「13:許可が拒否されました」が原因で NGINX Docker を実行できません

  3. catalina.out に大量の (許可が拒否されました)