今天我尝试使用 Docker 设置 postgresql。但是,当我使用 'hello-world' 进行测试时出现错误:
docker:守护进程的错误响应:OCI 运行时创建失败:container_linux.go:349: 启动容器进程导致“process_linux.go:449: 容器初始化导致 \"rootfs_linux.go:58: 将 \\"proc\\" 安装到 rootfs \\“/var/lib/docker/overlay2/1ef83761740dcfec79baa94e1ef3073bf1fa130a21f56e9201a80f4523e073ab/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 虚拟机管理程序而不是容器结果的环境中,您不会遇到此问题(例如:kvm
、vmware
、hyperv
、 甚至qemu
(运行速度非常慢)...但不是docker
或lxc
),或者如果提供程序通过放宽一些限制来明确允许嵌套。