Docker-compose非root用户创建卷

16

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

我的Dockerfile包含如下内容

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

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

当我执行docker-compose builddocker-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,但没有帮助。

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

操作系统:Ubuntu 16.04

Docker版本17.09.0-ce

Docker-compose版本1.8.0

1个回答

4
您可以尝试以下命令: 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拥有,并且如何更改它。 - Ilya Boltnev
1
你的卷已经挂载为1000:1000,因为这是你在主机上的用户。尝试使用 id -u ${users} 命令,它将给出你的用户ID。Docker容器中的卷类似于访问主机文件系统,因此你在卷中具有与主机文件系统相同的用户ID。 - Tobske

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接