我正在开发的容器中有以下内容。我正在处理的代码是 /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 来完成,那就太好了。
我用它来确保目录 /workspaces 归用户 l01
所有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,它工作正常。
• Git 克隆 git-lfs 过滤器进程:git-lfs:找不到命令
• 尽管成功上传了 LFS 对象,但 Git 大型文件存储没有推送到 repo
• Git for Windows:在命令 git config --list 之后无法运行任何命令
• Buildnumber maven 插件生成“空对象或无效表达式”而不是版本号
• git clone connection refused on personal gitlab
• Azure DevOps 和 Git Fetch 因错误而失败
• Windows Defender 针对 ext-modern-debug.js 发出“Exploit:JS/Blacole.KU”警报
• wandb.sdk.wandb_manager.ManagerConnectionRefusedError:连接到 wandb 服务失败:[WinError 10061]
• 制作翻译者属性