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\\”导致\\“权限被拒绝\\”\“”:未知。 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

您有任何问题或建议吗?

答案1

命令virt-what哪些输出lxc告诉您的整个系统是已经在无特权的情况下运行LXC容器(本身可能由 Proxmox 自己的 API/方法提供),由 seing 确定cat /proc/1/uid_map 没有输出0 0 4294967295但是0 100000 65536.

LXC对其运行的容器施加限制。如果没有特殊设置,此类容器本身无法对容器化功能进行标准访问在主机上(提供LXC容器,由您的 VPS 提供商拥有),有时还需要配合使用容器化工具。

我在 LXC 论坛中发现了这个讨论,它似乎与您的问题完全匹配:
在 Proxmox 的 LXC 非特权容器中安装 Docker-CE

现在 docker 守护进程应该没问题了;现在是第二个错误的时候了: docker run 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 内容公开给来宾。

这两个功能必须激活为你经过您的提供者。由于存在安全考虑,您的提供商可能不愿意这样做。因此,您应该检查与提供商的合同,看看您是否应该受到此类限制,并采取相应的行动。

在结果virt-what给出 VM 虚拟机管理程序而不是容器结果的环境中,您不会遇到此问题(例如:kvmvmwarehyperv、 甚至qemu(运行速度非常慢)...但不是dockerlxc),或者如果提供程序通过放宽一些限制来明确允许嵌套。

相关内容