在特权 LXC 容器中运行 docker build

问题描述 投票:0回答:1

在PVE中,已打开特权LXC容器,并且

lxc.apparmor.profile: unconfined
已添加到其配置中。 Docker 也在这个容器内运行。特权 Docker 容器使用
--privileged
运行,非特权 Docker 容器使用
--security-opt apparmor=unconfined
运行,两者都可以正常工作。现在,当尝试使用
docker build
选项运行
--security-opt apparmor=unconfined
时,会出现以下错误:

#8 0.339 runc run failed: unable to start container process: error during container init: unable to apply apparmor profile: apparmor failed to apply profile: write /proc/self/attr/apparmor/exec: no such file or directory

这个问题有什么解决办法吗?

docker dockerfile lxc
1个回答
0
投票

我不知道最新的 Proxmox gui,但是当我通过 linux cli 在 Ubuntu 20.04 LTS 主机上使用 Ubuntu18.04 LTS 创建并运行我的特权 LXC 容器时,我将以下几行添加到我的容器配置中:

# cat /var/lib/lxc/my_container_name/config

lxc.include = /usr/share/lxc/config/ubuntu.common.conf
lxc.apparmor.profile = unconfined
lxc.cgroup.devices.allow = a
lxc.cap.drop =
security.nesting = true
security.privileged = true

使工作嵌套容器成为可能。

使用这些行,所有 Ubuntu 22.04 LTS、Debian 12 或 RHEL9 之前的特权 docker 容器都可以在此 LXC 容器中正常工作。

也可以在 LXC 中嵌套容器两次(是的,听起来很可怕,但我们用它来测试你的 ansible 角色)。因此,我们在 lxc-nested docker 中运行 docker,并在 lxc-nested docker 中运行 lxc:

  • SYS_ADMIN
    能力;
  • /run
    /tmp
    /run/lock
    tmpfs;
  • /sys/fs/cgroup:/sys/fs/cgroup:rw
    (或设置
    :ro
    )从运行 docker 的主机绑定挂载。

在这种情况下,我们也曾看到过有关

/proc/self/attr/apparmor
的错误消息。谷歌搜索了一下带来了答案,你的apparmor未能应用配置文件。这样你应该有更多的输出和日志:

  1. apparmor_status
    命令确保您的 apparmor 已启动。如果您不需要 apparmor,您也可以禁用它们
    systemctl stop apparmor
    以停止 apparmor 守护进程和/或:

    $ sudo mkdir -p /etc/default/grub.d
    $ echo 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT apparmor=0"' \
      | sudo tee /etc/default/grub.d/apparmor.cfg
    $ sudo update-grub
    $ sudo reboot
    

    (来自 Debian wiki

  2. 运行

    lxc-start <container-name> --logfile <log_name>; cat <log_name> directly from your host to see what's happened on container start. If your PVE controls containers over LXD you should use 
    lxc start --logfile ` 命令。

  3. 看起来你的容器配置中还需要行

    lxc.apparmor.allow_incomplete = 1
    (参见lxc-start自debian 12.x升级以来失败(proxmox CT +嵌套lxc)。所以将它们添加到你的
    /var/lib/lxc/<my_container_name>/config
    文件中.

© www.soinside.com 2019 - 2024. All rights reserved.