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 权限也不行,因为它是外部的卷。无法更改权限。
所以这种应该怎么处理?
1
defunct9 18 小时 28 分钟前
services:
myservice: image: ubuntu:latest command: sleep infinity user: "0" # 以 root 用户运行 (用户 ID 0 即为 root) volumes: - ./mydata:/data |
3
yoiteshaw 17 小时 41 分钟前
除了 1L 方法是不是也可以
pull 完后改 chmod sudo chown -R 0:0 ./prisma ./logs sudo chmod -R 777 ./prisma ./logs |
4
nthin0 17 小时 33 分钟前 1
执行脚本中:
``` # 获取当前执行脚本用户的 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}" ``` |
5
guanzhangzhang 15 小时 59 分钟前
镜像的启动脚本改下就行了,参照
https://zhangguanzhang.github.io/2023/11/03/non-root-containers/ [持续更新] - 容器非 root 启动改造的经验 |