要約

要約

docker のインストールに問題があります。セキュリティ上の理由から、名前空間が別のユーザー ( userns-remap) に切り替えられるように「daemon.json」を設定しました。現在、コンテナー (切り替えられたユーザー コンテキスト ( ) を使用) を実行しUSER containeruser、同じコンテナー ネットワーク内にある別のコンテナーに ping を実行しようとすると、次のエラーが発生するという問題が発生しています。

$ ping 172.16.0.3
PING 172.16.0.3 (172.16.0.3): 56 data bytes
ping: permission denied (are you root?)

私はすでに AppArmor でいくつかのことを試し、さらに多くの機能を割り当てるなどしました。しかし、その問題を解決するのに役立つものはありませんでした。

実行中のイメージは、変更されていない Alpine Linux です。

私の問題に対する解決策はありますか?

答え1

要約

apk add iputils

説明

アルパインはビジーボックスこれはLinuxの通常のコマンドを単一のバイナリで実装します。ベースAlpineイメージのディレクトリを見ると、コマンドは(他のコマンドと同様に)シンボリックリンクである/binことがわかります。ping/bin/busybox

通常ユーザーとして実行するにはpingスイドビット設定します。シンボリック リンク (つまりchmod u+s /bin/ping) に suid ビットを設定したいと思うかもしれません。しかし、これは実際には busybox バイナリに設定されるため、シンボリック リンクとして登録されている他のすべてのコマンドにも設定され、セキュリティ違反になります。

iputils幸いなことに、 alpine には の代替バージョンを含むパッケージがあります。これをインストールすると、シンボリック リンクが、誰でも実行できる必要な権限を持つプレーン バイナリに置き換えられます。上記の必要なコマンドをDockerfile のping1 行に追加するだけです。RUN

答え2

これは OP の質問への回答ではありませんが、タイトルのエラーを検索している人にとっては役立つかもしれません。

次のコマンドを実行すると、Docker コンテナの root ユーザーとしてシェルに入ることができます。

docker exec -u 0 -it <container-name> <shell>

画像内に存在するシェルに応じて、、、、などのいずれshellかになります。試行錯誤の方法で見つけることができます。zshbashshash

これは、変更するための dockerfile がない場合 (例: レジストリから docker イメージを直接取得する場合) に特に役立ちます。

関連情報