今日、私は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/1ef83761740dcfec79baa94e1ef3073bf1fa130a21f56e9201a80f4523e073ab/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
質問や提案はありますか?
コマンド _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
_
_
keyctl=<boolean>
_(デフォルト= 0)非特権コンテナのみ:keyctl()システムコールの使用を許可します。これは、コンテナー内でdockerを使用するために必要です。
[...]
そして:
_
nesting=<boolean>
_(デフォルト= 0)ネストを許可します。 IDマッピングを追加した非特権コンテナでの使用に最適です。これにより、ホストのprocfsおよびsysfsの内容がゲストに公開されることに注意してください。
これら2つの機能は、your providerによってfor youでアクティブにする必要があります。セキュリティに関する考慮事項があるため、プロバイダーはそれを行う傾向がない場合があります。そのため、プロバイダーとの契約を確認して、そのような制限を受けるかどうかを確認し、それに応じて行動する必要があります。
_virt-what
_の結果がコンテナ結果ではなくVMハイパーバイザーを提供する環境でこの問題を発生することはありません(例:kvm
、vmware
、hyperv
、さらにqemu
(実行速度が非常に遅い)... docker
やlxc
ではない)、またはプロバイダーがいくつかの制限を緩和することにより、明示的にネストを許可します。