V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
FaiChou
V2EX  ›  程序员

docker 卷权限问题请教

  •  
  •   FaiChou ·
    FaiChou · 18 小时 33 分钟前 · 551 次点击
    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 权限也不行,因为它是外部的卷。无法更改权限。

    所以这种应该怎么处理?

    5 条回复    2025-01-24 15:57:27 +08:00
    defunct9
        1
    defunct9  
       18 小时 28 分钟前
    services:
    myservice:
    image: ubuntu:latest
    command: sleep infinity
    user: "0" # 以 root 用户运行 (用户 ID 0 即为 root)
    volumes:
    - ./mydata:/data
    FaiChou
        2
    FaiChou  
    OP
       18 小时 21 分钟前 via iPhone
    @defunct9 这样需要 sudo 以身份来执行这个 docker compose up 吧
    yoiteshaw
        3
    yoiteshaw  
       17 小时 41 分钟前
    除了 1L 方法是不是也可以
    pull 完后改 chmod
    sudo chown -R 0:0 ./prisma ./logs
    sudo chmod -R 777 ./prisma ./logs
    nthin0
        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}"
    ```
    guanzhangzhang
        5
    guanzhangzhang  
       15 小时 59 分钟前
    镜像的启动脚本改下就行了,参照
    https://zhangguanzhang.github.io/2023/11/03/non-root-containers/ [持续更新] - 容器非 root 启动改造的经验
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1072 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:56 · PVG 07:56 · LAX 15:56 · JFK 18:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.