docker可以动态创建服务账号吗?

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

我希望所有自托管容器都以用户

${SLUG}
和组
${GROUP_SLUG}
的身份运行,如果该用户/组不存在,则应创建它。

我不需要手动维护它们;它是一个服务帐户,其存在的唯一目的是由该容器运行。

是否可以仅使用 docker compose,而不使用任何其他文件来执行以下操作:

docker compose up

  1. 所有服务都会检查
    ${SLUG}
    是否是已知用户。如果没有,请在主机上创建它。
  2. 所有服务都会检查
    ${GROUP_SLUG}
    是否是已知组;如果没有,请在主机上创建它。
  3. 所有服务都以环境变量中的用户和组身份运行。
  4. 容器创建的任何文件都将使用该用户创建。

我不是在寻找:

  1. 完成此操作的其他文件。
  2. docker compose up
  3. 之前的特殊命令

总而言之,我正在寻找一种方法让 Docker 维护其容器的服务用户(AKA 帐户)。

这可能吗?

docker docker-compose permissions service-accounts
1个回答
0
投票

在您的 Compose 文件中,只需设置所需的用户和组 ID。 假设它们是数字,你可以设置

user: "${SLUG}:${GROUP_SLUG}"

并运行例如

#!/bin/bash
export SLUG="$RANDOM"
export GROUP_SLUG="$RANDOM"
docker-compose up -d

(其中,特别是在 GNU Bash 中,环境变量

$RANDOM
计算为 0 到 32767 之间的随机整数。)

无需以任何重要方式创建用户,无论是在主机上还是在容器中。

如果您只有一个用户和组名称,并且该用户和组已经存在于主机上,那么您可以在系统信息中查找它们。

user: "${UID}:${GID}"
export UID=$(id -u "$SLUG")
export GID=$(getent group "$GROUP_SLUG" | cut -d: -f3)
docker-compose up -d

只需设置

user:
通常就会达到您想要的效果:在容器中运行的单个进程将具有指定的用户 ID,这意味着该进程创建的任何文件都将归该用户所有(该用户可能不存在于容器中)
/etc/passwd
在主机上或在容器中)。

可以构建一个镜像,这样就行不通了,并且您必须编辑 Dockerfile 来解决这些问题。 某些操作需要 root 访问权限,如果容器以非 root 用户身份运行,则这些操作将不起作用(您可以在 Dockerfile 中进行此设置吗?);我见过一些需要写回应用程序源代码树的设置,如果用户 ID 不匹配,这些设置就不起作用。 解决这些问题将针对图像和您遇到的问题。

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