docker 卷权限问题请教

2 天前
 FaiChou
services:
  app:
    build: .
    ports:
      - "3210:3210"
    env_file:
      - .env
    volumes:
      - ./prisma:/app/prisma
      - ./logs:/app/logs

项目中有这样的一个 docker-compose 文件,在 Docker 内会对这个 prisma 和 logs 进行读写。

正常来讲不使用 root 用户 pull 下来这个项目,然后就不会遇到权限问题。

但是如果是用 root 进行 git pull ,然后两个目录的组和用户都变成 root 了,这会导致 Docker 内读写这两个目录有权限问题。即使在 Dockerfile 内创建响应的用户和组,加上 777 权限也不行,因为它是外部的卷。无法更改权限。

所以这种应该怎么处理?

814 次点击
所在节点    程序员
5 条回复
defunct9
2 天前
services:
myservice:
image: ubuntu:latest
command: sleep infinity
user: "0" # 以 root 用户运行 (用户 ID 0 即为 root)
volumes:
- ./mydata:/data
FaiChou
2 天前
@defunct9 这样需要 sudo 以身份来执行这个 docker compose up 吧
yoiteshaw
2 天前
除了 1L 方法是不是也可以
pull 完后改 chmod
sudo chown -R 0:0 ./prisma ./logs
sudo chmod -R 777 ./prisma ./logs
nthin0
2 天前
执行脚本中:
```
# 获取当前执行脚本用户的 UID 和 GID
export CURRENT_UID=$(id -u)
export CURRENT_GID=$(id -g)
```

docker-compose.yml 中:
```
services:
myservice-a:
user: "${CURRENT_UID:-0}:${CURRENT_GID:-0}"
```
guanzhangzhang
1 天前
镜像的启动脚本改下就行了,参照
https://zhangguanzhang.github.io/2023/11/03/non-root-containers/ [持续更新] - 容器非 root 启动改造的经验

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1107569

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX