如何在容器中的特定用户下运行azure容器作业

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

在azure管道中运行container-job,我使用了一个docker映像(conan,它希望build命令将在conan下运行。

虽然我可以使用--user root毫无问题地使用options引导容器,但>

resources:
  containers:
  - container: builder                  
    image: conanio/clang8
    options: --user root

当我工作时

jobs:
- job: do_that
  container: builder
  steps:
  - task: Bash@3
    inputs:
      targetType: inline
      script: whoami
      noProfile: false
      noRc: false

[我看到用户是1001,它已被天蓝色的引导程序所吸引。我不能使用sudo / su,因为不允许该用户使用sudo。我问自己如何以其他用户身份运行?由于柯南的python填充,~/.conan中的特殊设置以及所有这些,因此用户具有特定的ENV设置。

使用docker create在az中的“容器初始化”期间(在docker exec之后),az中的确切步骤自动运行:

# Grant user 'conan' SUDO privilege and allow it run any command without authentication.
groupadd azure_pipelines_sudo
usermod -a -G azure_pipelines_sudo conan
su -c "echo '%azure_pipelines_sudo ALL=(ALL:ALL) NOPASSWD:ALL' >> /etc/sudoers"

# Allow user 'conan' run any docker command without SUDO.
stat -c %g /var/run/docker.sock
bash -c "cat /etc/group"
groupadd -g 117 azure_pipelines_docker
usermod -a -G azure_pipelines_docker conan

语义思想是:

  1. 提取默认情况下要运行该图像的用户(在我们的情况下为conan / 1000] >>
  2. 创建组azure_pipelines_sudo
  3. 授予此用户sudo权限,没有密码要求
  4. 授予此用户conan权限,以访问docker socket又名运行docker in docker命令
  5. 看到这个设置我真的很想知道,为什么有效地然后仅使用如下行来运行docker exec语句

    docker exec -u 1001 ..

所以在运行实际作业时非常有效,它没有使用用户conan1000)-因此将其配置为具有sudo / docker访问之类的所有功能-如果是设计使然,为什么要这样做2-4设置?

在某种程度上,这看起来像是设计缺陷,错误或只是巨大的误解。

我看过this question,但即使标题假定了,这也是一个非常不同的问题

在azure管道中运行容器作业,我使用docker镜像(conan),该镜像期望构建命令在conan下运行。尽管我能够使用--user ...

天青地引导容器,
代理使用三种不同的身份验证令牌:

Agent注册令牌

:仅在在代理池中注册代理时使用
  • Listener OAuth令牌:代理在侦听新作业时使用
  • 特定于作业的OAuth令牌
  • :代理程序在运行单个作业时使用即使该链接问题与您的问题无关。但是有一条评论是正确的:
  • 代理本身已设置为以用户身份运行。当构建运行时以用户“ containeradministrator”(根)的身份在容器中运行码头用户。

您想要的似乎正在运行

Docker容器作为非root用户。实际上,这与Azure DevOps服务端无关,而与Docker有关。

请检查是否对Connect to docker container as user other than root和此blog有帮助。

bash azure-devops
1个回答
-1
投票

Agent注册令牌

:仅在在代理池中注册代理时使用
© www.soinside.com 2019 - 2024. All rights reserved.