
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 のping
1 行に追加するだけです。RUN
答え2
これは OP の質問への回答ではありませんが、タイトルのエラーを検索している人にとっては役立つかもしれません。
次のコマンドを実行すると、Docker コンテナの root ユーザーとしてシェルに入ることができます。
docker exec -u 0 -it <container-name> <shell>
画像内に存在するシェルに応じて、、、、などのいずれshell
かになります。試行錯誤の方法で見つけることができます。zsh
bash
sh
ash
これは、変更するための dockerfile がない場合 (例: レジストリから docker イメージを直接取得する場合) に特に役立ちます。