web-dev-qa-db-ja.com

Dockerエラー:「Hello World」の許可が拒否されました

今日、私はDockerでpostgresqlを設定しようとしています。ただし、「hello-world」でテストするとエラーが発生します。

docker:デーモンからのエラー応答:OCIランタイムの作成に失敗しました:container_linux.go:349:コンテナープロセスの開始により「process_linux.go:449:コンテナーの初期化により\ "rootfs_linux.go:58:rootfsに\\" proc \\ "がマウントされました」 \\ "/ proc \\"での\\ "/ var/lib/docker/overlay2/1ef83761740dcfec79baa9​​4e1ef3073bf1fa130a21f56e9201a80f4523e073ab/merged \\"により\\ "permission denied \\"\""が発生しました:不明です。 ERRO [0003]コンテナー待機エラー:コンテキストがキャンセルされました

よく起こるこの問題について知りましたが、解決策が見つかりませんでした(docker groupeの設定、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

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

2

コマンド _virt-what_ you ran と出力lxcは、システム全体がalready非特権で実行されていることを示します [〜#〜] lxc [〜#〜] コンテナー(おそらくProxmox独自のAPI /メソッドによってプロビジョニングされます)。これは、_cat /proc/1/uid_map_ を実行しないことにより決定されます 出力_0 0 4294967295_ですが_0 100000 65536_です。

LXCは、実行中のコンテナーに制限を課します。そのようなコンテナーは、特別な設定を行わない限り、コンテナー化機能自体に標準アクセスできませんホスト上(LXCコンテナーを提供VPSプロバイダーが所有)とコンテナー化ツールも時々一緒に働くこと。

私はこれがLXCフォーラムで議論されているのを見つけました、そしてそれはあなたの問題と正確に一致しているようです:
ProxmoxのLXC非特権コンテナーでのDocker-CEの作業インストール

これで、Dockerデーモンは正​​常に動作するはずです。 2つ目のエラーの時間です。dockerrun hello-worldがエラーを返します"procをrootfsにマウントしています...権限が拒否されました"

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

以下を含む行を手動で挿入して修正します(トリック#2)。

_features:  keyctl=1,nesting=1
_

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

_keyctl=<boolean>_(デフォルト= 0)

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

そして:

_nesting=<boolean>_(デフォルト= 0)

ネストを許可します。 IDマッピングを追加した非特権コンテナでの使用に最適です。これにより、ホストのprocfsおよびsysfsの内容がゲストに公開されることに注意してください。

これら2つの機能は、your providerによってfor youでアクティブにする必要があります。セキュリティに関する考慮事項があるため、プロバイダーはそれを行う傾向がない場合があります。そのため、プロバイダーとの契約を確認して、そのような制限を受けるかどうかを確認し、それに応じて行動する必要があります。

_virt-what_の結果がコンテナ結果ではなくVMハイパーバイザーを提供する環境でこの問題を発生することはありません(例:kvmvmwarehyperv、さらにqemu(実行速度が非常に遅い)... dockerlxcではない)、またはプロバイダーがいくつかの制限を緩和することにより、明示的にネストを許可します。

2
A.B