今日は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 4294967295
が0 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を通過する環境ではこの問題は発生しません。明示的にネストを許可するいくつかの制限があります。hyperv
qemu
docker
lxc