【问题标题】:mounting permission denied in dockerdocker中的安装权限被拒绝
【发布时间】:2020-08-29 02:14:09
【问题描述】:

根据官方指南(Install Docker Engine on Ubuntu),我在云服务器上安装 docker 时遇到了问题。我完成了旧版本的卸载、存储库设置和 docker 引擎安装(sudo apt-get install docker-ce docker-ce-cli containerd.io)。但是,我在运行 hello-world 时遇到了错误。

wyf@VM1103-Timi:~$ sudo docker run hello-world
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"proc\\\" to rootfs \\\"/var/lib/docker/overlay2/e9fedf64e8983aa01e513cee591cdfd7fc60962466a476b51fc1ead682ec8022/merged\\\" at \\\"/proc\\\" caused \\\"permission denied\\\"\"": unknown.
ERRO[0000] error waiting for container: context canceled

我试过重启docker和server,但问题依然存在。 因此,如果有人可以指导我修复此错误,那就太好了。 如果您对此问题有任何想法,请告诉我。 非常感谢!

附: 我的系统是 Ubuntu 18.04。因此,我没有 selinux。我检查了 AppArmor 日志,而不是 selinux。

May 19 21:14:55 VM1103-Timi networkd-dispatcher[155]: WARNING:Unknown index 37 seen, reloading interface list
May 19 21:14:55 VM1103-Timi systemd-networkd[126]: veth71cf495: Link UP
May 19 21:14:55 VM1103-Timi containerd[170]: time="2020-05-19T21:14:55.679793295+08:00" level=info msg="shim containerd-shim started" address="/containerd-shim/moby/4c207ce1273d2c863ee419c5ebb271163a031394bd4c17ee75d44267d631954d/shim.sock" debug=false pid=106265
May 19 21:14:55 VM1103-Timi containerd[170]: time="2020-05-19T21:14:55.767796543+08:00" level=info msg="shim reaped" id=4c207ce1273d2c863ee419c5ebb271163a031394bd4c17ee75d44267d631954d
May 19 21:14:55 VM1103-Timi dockerd[15100]: time="2020-05-19T21:14:55.776863367+08:00" level=error msg="stream copy error: reading from a closed fifo"
May 19 21:14:55 VM1103-Timi dockerd[15100]: time="2020-05-19T21:14:55.776953910+08:00" level=error msg="stream copy error: reading from a closed fifo"
May 19 21:14:55 VM1103-Timi systemd-networkd[126]: veth71cf495: Link DOWN
May 19 21:14:55 VM1103-Timi dockerd[15100]: time="2020-05-19T21:14:55.927805156+08:00" level=error msg="4c207ce1273d2c863ee419c5ebb271163a031394bd4c17ee75d44267d631954d cleanup: failed to delete container from containerd: no such container"

奇怪的是没有permission-denied错误的记录。

这是我的 ubuntu 版本、内核版本和 docker 信息:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.4 LTS
Release:        18.04
Codename:       bionic
5.3.18-3-pve
Client:
 Debug Mode: false
Server:
 Containers: 8
  Running: 0
  Paused: 0
  Stopped: 8
 Images: 1
 Server Version: 19.03.8
 Storage Driver: overlay2
  Backing Filesystem: <unknown>
  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:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 5.3.18-3-pve
 Operating System: Ubuntu 18.04.4 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 4GiB
 Name: VM1103-Timi
 ID: 3G3F:LTVZ:NO25:C7LA:XKQV:ETMB:B6QU:3ZFJ:KBA5:R3KK:QZEA:ZONC
 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

AppArmor 配置文件“docker-default”似乎丢失了。 “docker-default”未正确生成。检查如下:

root@VM1103-Timi:/etc/apparmor.d# aa-status
    apparmor module is loaded.
    12 profiles are loaded.
    12 profiles are in enforce mode.
       /sbin/dhclient
       /usr/bin/man
       /usr/lib/NetworkManager/nm-dhcp-client.action
       /usr/lib/NetworkManager/nm-dhcp-helper
       /usr/lib/connman/scripts/dhclient-script
       /usr/lib/lightdm/lightdm-guest-session
       /usr/lib/lightdm/lightdm-guest-session//chromium
       /usr/sbin/mysqld
       /usr/sbin/tcpdump
       docker-default
       man_filter
       man_groff
    0 profiles are in complain mode.
    1 processes have profiles defined.
    1 processes are in enforce mode.
       /usr/sbin/mysqld (258)
    0 processes are in complain mode.
    0 processes are unconfined but have a profile defined.

【问题讨论】:

  • 对我来说类似的问题。 Docker 重新安装/升级。来自守护进程的错误响应:重新挂载/docker/overlay2/e7..91/merged/host/net,标志:0x44000:权限被拒绝错误:docker 命令失败(rc=1,t=600,cmd=-H unix:// /var/run/docker.sock cp) 来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:345: 启动容器进程导致“process_linux.go:430: 容器初始化导致”rootfs_linux.go:58: 挂载“/ proc/1/net”到“/docker/overlay2/e7..91/merged/host/net”处的rootfs“/docker/overlay2/e7..91/merged”导致“权限被拒绝:未知```跨度>
  • 解决方案可能是打开所需的端口。测试:禁用 selinux 和 firewalld,例如在 CentOS systemctl stop firewalld 上;设置强制 0;如果您可以创建容器,您可以启用防火墙和 selinux 并打开端口并根据需要添加例外。

标签: docker ubuntu permissions mount


【解决方案1】:

解决方案可能是打开所需的端口。您的系统可能正在运行 selinux 和(ufw 或 firewalld 或 iptables)?和/或其他?阅读一些关于 linux 防火墙工具的信息,尤其是在您的系统上运行的那些。

对于selinux的情况,需要查看selinux的日志,是不是阻塞访问了?使用 selinux 命令添加异常。 https://wiki.centos.org/HowTos/SELinux 这些工具非常值得学习,但可能很复杂。禁用 selinux 和 firewalld 的快速测试可以确认这是问题的根源,您可以稍后启用 selinux 和 firewalld 并以安全的方式允许/打开端口。

简单测试:禁用 selinux 和 firewalld,例如在 CentOS 上

systemctl stop firewalld;
setenforcing 0; 

如果您可以创建禁用 selinux 的容器,那么您已经确认 selinux 是您的问题。您可以启用防火墙和 selinux,然后根据需要添加例外并打开端口。

这看起来不错(特定于 ubuntu,但恕我直言),它详细说明了打开端口以允许 docker swarm 工作所需的 ufw 命令、firewalld 命令和 iptables 命令)https://www.digitalocean.com/community/tutorials/how-to-configure-the-linux-firewall-for-docker-swarm-on-ubuntu-16-04

我最初从这里获得了有关打开所需端口的 ufw 命令的有用信息: Error response from daemon: attaching to network failed, make sure your network options are correct and check manager logs: context deadline exceeded

ufw allow 2376/tcp 
ufw allow 2377/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp
ufw enable #maybe
ufw reload
systemctl restart docker

这是一个很常见的问题,通常 selinux 不允许访问所需的端口。 例如 https://github.com/google/cadvisor/issues/333

【讨论】:

  • 感谢您的回复。我试过允许一些端口。 ufw allow 2377/tcp ufw allow 7946/tcp ufw allow 7946/udp ufw allow 4789/udp 但问题依然存在。顺便说一句,由于我的操作系统是 ubuntu,我没有在上面找到 selinux。
  • 这对 ubuntu 来说似乎不错,(详细介绍了打开端口所需的 ufw 命令、firewalld 命令和 iptables 命令,请参阅还有额外的 ufw allow 2376/tcp 以及之后的 ufw reload 和 systemctl restart docker)digitalocean.com/community/tutorials/…
  • 按照建议,我通过 ufw 打开了这些端口。就像thisufw reloadsystemctl restart docker。但是,问题仍然存在。有什么有用的日志值得检查吗?
  • 嗯。我做了apt-get install docker docker.io;和docker run hello-world;在 ubuntu 19.10 上运行正常。 docker info 显示 swarm 对我来说是禁用的。如果您运行docker info,您会看到 Swarm: inactive 还是 Swarm: active ?如果活动,docker node ls 会显示什么?我想知道你的群初始化好吗?
  • 我在上面的 docker 信息中看到它显示 Swarm:inactive。所以不是这样。 .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多