【问题标题】:Docker-compose volume creation for non-root user为非 root 用户创建 Docker-compose 卷
【发布时间】:2023-03-16 07:39:01
【问题描述】:

我正在尝试使用 docker-compose 为我的 Web 应用程序创建一个 docker 映像。我的 Web 应用程序需要权限才能在文件系统上写入文件。

我的 Dockerfile 包含

# some other stuff
RUN addgroup -S web && adduser -S -g web web
USER web  

我想将我当前的.目录挂载到docker容器中的/code

当我执行docker-compose build && docker-compose up 时,我的容器中的/code 目录属于用户“1000:1000”,而不是我在 Dockerfile 中创建的用户。

version: '2'                                                                     

services:                                                                                           
  admin:                                                                         
    build:                                                                       
      context: .                                                                 
      dockerfile: Dockerfile                                                     
    command: python manage.py 0.0.0.0 8030                           
    volumes:                                                                     
    - .:/code                                                                    
    ports:                                                                       
     - 9000:8030                                                                 
    stdin_open: true                                                             
    tty: true                                                                                                                 
volumes:                                                                         
  .:                                                                             
    driver_opts:                                                                 
      o: uid=100,gid=65533

如您所见,我尝试使用我的用户 uid 和 gid 参数传递 driver_opts;但它没有帮助。

我的问题是:我应该怎么做才能将我的目录 . 挂载到用户 web 的 docker 容器权限中的 /code

操作系统:Ubuntu 16.04

docker 版本 17.09.0-ce

docker-compose 版本 1.8.0

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    你可以试试:

    RUN addgroup -g 1000 web && \ adduser -G web -g web -s /bin/sh -D web

    您的用户将能够写入已安装的目录。

    【讨论】:

    • 是的,差不多就是这样。通过显式设置用户 uid 和 gid 解决了这个问题:RUN addgroup -S web -g 1000 && adduser -u 1000 -G web -D web。它解决了我写权限的问题。但我仍然不清楚为什么我的卷总是由1000:1000 拥有,我该如何改变这个
    • 您的卷以 1000:1000 安装,因为这是您主机上的用户。试试id -u ${users},它会给你你的用户ID。 docker 容器中的卷是对您的主机文件系统的一种访问,因此您在卷中拥有与主机文件系统上相同的用户 ID。
    猜你喜欢
    • 2020-11-21
    • 1970-01-01
    • 2016-10-08
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2017-02-09
    • 1970-01-01
    相关资源
    最近更新 更多