针对容器进行开发 - 为外部安装的卷更改 ./git 对象的所有者

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

我正在开发的容器中有以下内容。我正在处理的代码是 /workspaces 中的一个卷。这段代码的目的是在我更改用户并以我自己的身份运行之前更改所有对象/文件的所有权...

ARG USER
ARG USER_ID
ARG GROUP_ID

RUN if id $USER &>/dev/null; then userdel -f $USER; fi
RUN useradd -l -u ${USER_ID} -g ${GROUP_ID}  $USER 
RUN mkdir /workspaces
RUN chown -R $USER /workspaces

在 Docker compose 中,我将用户更改为:

    args:
       USER: ${USER}

我看到的问题是,在 workspaces/.git/objects 下,有许多文件的所有者仍然设置为 root。 我认为这里的问题是该卷仅在容器启动后才安装。所以上面的 chown 命令不会影响之前存在或创建的文件。 因此,当我尝试执行可能会尝试修改这些文件的 git 命令时,我收到了权限错误。

挂载卷后我如何拥有所有文件的所有权? 我正在使用 docker-compose 构建容器。

编辑: @lemoana。要安装音量,我有这个:

    volumes:
      - ../..:/workspaces:cached

@DavidMaze:在主机上运行 ide/调试是有问题的,因为主机上的环境和依赖性非常不一致,并且“修复”此问题或安装其他工具库的权限有限。 是的,现在我必须做的是一次性将所有与工作区相关的文件更改给用户。对于从基础设施所需的图像中旋转起来的其他依赖容器来说,这仍然是个问题,例如 mongodb、redis 等……它们仍然是作为根创建的,所以我可以轻松地从主机上擦除/清理它们的文件而不用做你说的话。 如果可以在更改为正在运行的用户之前使用 docker compose 作为 post hook 和 root 来完成,那就太好了。

docker visual-studio-code docker-compose vscode-devcontainer
1个回答
-1
投票

我用它来确保目录 /workspaces 归用户 l01

所有
  • 这里我的测试用户是l01,用户组是l01-group
  • 下面是我的Dockerfile用于测试
FROM python:3.10-slim

WORKDIR /workspaces

RUN groupadd l01-group &&\
    useradd -l -g l01-group l01  &&\
    chown -R l01:l01-group /workspaces

构建镜像后,我运行容器并检查权限:

docker exec -it l01-python ls -ld /workspaces

目录的所有者是我的用户l01,它工作正常。

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