docker 在非特权模式下运行

docker 在非特权模式下运行

上次我在docker for runners中使用了docker,但是它需要特权模式

撰写文件:

version: '3.7'
services:
  runner:
    image: gitlab/gitlab-runner:latest
    volumes:
      - ./config:/etc/gitlab-runner
      - ./run:/var/run/
#      - /var/run/docker.sock:/var/run/docker.sock

  docker:
    image: docker:dind
    restart: always
    privileged: true # <-- security problems
    volumes:
      - ./run:/var/run/

我有一台个人电脑。我有一个 Gitlab 团队需要使用 Gitlab CI 运行docker builddocker-compose up编写脚本。我真的想加快 CI 的速度。这就是为什么我分享我的主持人使用跑步者,现在他们有了docker缓存(图像等等),当一个阶段构建图像而另一个阶段需要它时,速度真的很快。

我在 Jenkins 上遇到了同样的问题。我需要与工作节点共享主机 docker。

上次我想测试新方法,并使用自己的 docker 运行运行器。我几乎没有 2 件重要的事情:- 资源限制(我想共享 8 个 CPU 内核中的 7 个、16 GB 内存中的 10 个、一些 HDD 限制)- 安全性

需要补充的是:我没有需要 GPU、网络功能、安装某些设备等的 CI 脚本。它们通常执行简单的操作docker builddocker push有时我需要使用来获取工件docker cp,仅此而已。主要问题:如何在 docker 中以无 root 权限的方式在主机上运行 docker

两者 - 套接字共享或特权模式都会给主机带来漏洞,并且虚拟机(如 VirtualBox 或类似的东西)运行缓慢且难以操作,我也想共享资源,并且希望 docker使用 16 GB 中的 10 GB,但是当不使用时,10 GB 应该是免费的。

当我以通常的权限运行 dind contatiner 时(失败之前),出现了一些无信息的错误:

gitlab-runner-docker | mount: permission denied (are you root?)
gitlab-runner-docker | mount: permission denied (are you root?)
gitlab-runner-docker | Could not mount /sys/kernel/security.
gitlab-runner-docker | AppArmor detection and --privileged mode might break.

如果尝试在非特权模式下运行 docker,会遇到什么问题?该怎么办?

答案1

好吧,关于 RAM 内存的负载平衡,我无能为力,但是您可以通过将当前用户添加到 docker 组,在 docker (dind) 中运行 docker,而无需 sudo 权限,

我看不到共享套接字的安全性,因为它失去了完整性,但我建议使用具有特权参数的作曲家参数实例化 dind:true

相关内容