我一直在努力解决在 Dell 5100 IoT Edge Gateway 上运行 docker snap 的问题。我有另一个 Dell Gateway - 3001 - 不会遇到此问题。
以下是我在 Dell 5100 Gateway 上执行的步骤:
安装了 Docker Snap,以下是“snap list”的输出:
admin@localhost:~$ snap list
Name Version Rev Developer Notes
bluez 5.44-2 84 canonical -
core 16.04.1 394 canonical -
docker 17.03.1-ce-1 124 docker-inc -
modem-manager 1.6.2-5 82 canonical -
network-manager 1.2.2-10.2 166 canonical -
snapweb 0.26.1 207 canonical -
stlouis 16.04-1.13 11 canonical -
stlouis-kernel 4.4.0-77-1 19 canonical -
tpm2 1.0-4 18 canonical -
uefi-fw-tools 1.4.1-0.7.2+git 7 canonical -
安装后,我运行了 docker.help 中所述的命令来启用正确的 snap 接口:
sudo snap connect docker:home :home
运行上面#2中的命令后“snap interface”命令的输出。
$ snap interfaces | grep docker
:docker-support docker:privileged,docker:support
:firewall-control docker
:home docker
:network docker,snapweb,tpm2,uefi-fw-tools
:network-bind docker,snapweb,tpm2
docker:docker-daemon docker:docker-cli
admin@localhost:~$
然后我使用以下命令检查了 docker 的 apparmor 状态:
与我看到的同一命令的 3001 输出不同,docker-default
缺少:
$ sudo aa-status | grep docker
snap.docker.compose
snap.docker.docker
snap.docker.dockerd
snap.docker.help
snap.docker.dockerd (1582)
snap.docker.dockerd (1627)
以下是 Dell 3001 网关的 apparmor 状态和 snap 列表的输出:
3001 和 5100 之间的最大区别在于操作系统版本 - 我对 Ubuntu Core 非常陌生,无法弄清楚为什么 apparmor 状态中缺少 docker-default。我已经重新启动、恢复出厂设置并尝试了许多其他方法。出现的问题如下:
我可以拉取图像,并且它可以工作,我使用了以下命令:
sudo docker pull eclipse-mosquitto:1.4.10
图像已被拉出,但是当我尝试运行它时:
$ sudo docker run -d -p 1883:1883 -p 9001:9001 --name mqtt -t eclipse-mosquitto:1.4.10
d11e29c04064ea3c546c6c9141abae73508dd2cc98492860accb4461af40b661
docker: Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded...
我也尝试使用无限制策略来运行它,然后我得到了oci runtime error
:
$ sudo docker run -d --security-opt apparmor=noconfinement -p 1883:1883 -p 9001:9001 --name mqtt -t
eclipse-mosquitto:1.4.10
fe501196f9ac0d27e82b43069aafee4c806d80c1ae9ce363040b96996d74f963
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused
"process_linux.go:258: applying cgroup configuration for process caused \"mkdir /var/lib/snapd/hostfs/sys/fs/cgroup/cpuset/docker: permission denied\"".
请注意,在 Dell 3001 Gateway 上执行相同的步骤不会出现上述两个问题。
答案1
首先,很抱歉没有收到对您非常重要的问题的任何回复。对于可能遇到同样问题的其他用户,问题的关键在于 3001 上 docker 可以成功运行的核心快照是较新的核心快照版本,而在 5100 上,核心快照停留在与工厂 Ubuntu Core 映像一起提供的相同过时版本。过时版本存在一个问题,导致无法正确接收较新版本的核心快照。Ubuntu Store 方面已解决此问题,因此可以将此较旧的核心快照更新为最新的验证版本,因此此特定问题不会影响其他任何人。
另外,为了方便以后参考,我想向你指出snapcraft.io 论坛其中讨论了一切快照和 Ubuntu Core。
答案2
您实际上缺少--security-opt seccomp:unconfined
选项和-v /sys/fs/cgroup:/sys/fs/cgroup:ro
绑定挂载(使用 docker snap 时它们都没有意义,因为它已经完全受限运行)因此使用:
--security-opt apparmor:unconfined --security-opt seccomp:unconfined -v /sys/fs/cgroup:/sys/fs/cgroup:ro
是正确的做法... 围绕 docker 可执行文件的 snap 限制将保证安全。
答案3
这看起来不太好,因为这是一个非常老的核心 snap 版本。基本上,这个问题发生过一次,是戴尔代表在 5 个月前报告的。
要解决这个问题。
请运行以下命令以使所有 snap 保持最新
sudo snap refresh
如果你在从品牌商店更新核心 snap 时遇到以下问题
Error cannot refresh "core" :cannot refresh "core" to revision xxxx: no validation by "xxxxxx"
这意味着核心快照尚未通过验证,尽管它已获得资格。但是,您仍然可以通过
--ignore-validation
运行以下命令来更新它:sudo snap refresh core --ignore-validation
根据 Jim 的建议,所有与 snap 和 ubuntu-core 相关的讨论现在都转移到了snapcraft.io论坛。它是进行快速讨论的首选场所,您总能及时获得反馈。