Dockerエラー:「Hello World」権限が拒否されました。

Dockerエラー:「Hello World」権限が拒否されました。

今日はDockerを使ってpostgresqlを設定してみました。しかし、「hello-world」を使ってテストするとエラーが発生します。

docker: デーモンのエラー応答: OCI ランタイム生成に失敗しました: Container_linux.go:349: コンテナー・プロセスの開始により "process_linux.go:449: コンテナーの初期化のために"rootfs_linux.go:58: \\"proc\\" を削除発生 rootfs\\"/var/lib/docker/overlay2/1ef83761740dcfec79baa9​​ 4e1ef3073bf1fa130a21f56e9201a80f4523e073ab/merged\\" が \\"/proc\\"なし。エラー[0003]コンテナの待機中にエラーが発生しました。コンテキストがキャンセルされました。

この問題について学んだことがよくありますが、解決策が見つかりませんでした(dockerグループの設定、sudoで起動などをテストしました...)。

これは「ドック情報」です。

Client:
 Debug Mode: false

Server:
 Containers: 3
  Running: 0
  Paused: 0
  Stopped: 3
 Images: 1
 Server Version: 19.03.10
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 5.3.18-3-pve
 Operating System: Debian GNU/Linux 9 (stretch)
 OSType: linux
 Architecture: x86_64
 CPUs: 3
 Total Memory: 7.938GiB
 Name: 18507
 ID: 6GVD:Z44L:34QD:NS5H:UXZM:IARY:PI66:3NZN:XRWH:WP7C:KEJM:7KDF
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

質問や提案がありますか?

ベストアンサー1

注文するvirt-whatあなた走るlxcシステム全体が次のように通知される出力は何ですか?すでに権限なしで実行LXCコンテナ(それ自体はProxmoxの独自のAPI /メソッドによって提供される可能性があります)を参照して決定されます。cat /proc/1/uid_map いいえ出力0 0 42949672950 100000 65536

LXC は実行されるコンテナに制限を課します。これらのコンテナ自体には、特別な設定なしでコンテナ化された機能への標準アクセス権はありません。ホストから(LXCコンテナ提供、VPSプロバイダーが所有)、時にはコンテナ化ツールを使用する必要があります。

LXCフォーラムでこのディスカッションを見つけましたが、あなたの質問と正確に一致しているようです。
ProxmoxのLXC非特権コンテナにDocker-CEをインストールする

今dockerデーモンは問題がないでしょう。これで、2番目のエラーが発生する時間です。 docker run hello-world が "Mounting proc to rootfs...permission failed" エラーを返します。

予想通り、解決策はLXCでネストされたコンテナ化を有効にする/プロックスモックス。これはVPSプロバイダーが行う必要があります。(またはユーザーに提供するいくつかのAPI)。

次の内容を含む行を手動で挿入して問題を解決します(ヒント#2)。

features:  keyctl=1,nesting=1

見るときProxmoxのドキュメント:

keyctl=<boolean>(既定値 = 0)

権限のないコンテナーのみ:keyctl()システムコールが許可されます。これはコンテナ内で docker を使用するために必要です。
[...]

そして:

nesting=<boolean>(既定値 = 0)

ネストが許可されます。追加のIDマッピングを持つ権限のないコンテナに最適です。これにより、ホストのprocfsとsysfsの内容がゲストに公開されます。

これら2つの機能を有効にする必要がありますあなたのため渡すあなたのプロバイダ。あなたのサービスプロバイダは、セキュリティ上の問題のためにそれを消す可能性があります。したがって、あなたがそのような制限を受けるべきかどうかを調べ、それに応じて行動するには、サービスプロバイダとの契約を確認する必要があります。

結果がvirt-whatコンテナの結果ではなくVMハイパーバイザーを提供する環境(たとえば、、、、kvmまたは(非常に遅い実行)...またはそうでない) 、またはプロバイダvmwareがRelaxを通過する環境ではこの問題は発生しません。明示的にネストを許可するいくつかの制限があります。hypervqemudockerlxc

おすすめ記事