【问题标题】:Access named volume from container when not running as root?不以root身份运行时从容器访问命名卷?
【发布时间】:2016-03-10 23:32:43
【问题描述】:

我在 Docker Compose 下运行 Celery。我想让 Celery's Flower 持久。所以我这样做:

version: '2'
volumes:
  [...]
  flower_data: {}
[...]
flower:
  image: [base code image]
  ports:
    - "5555:5555"
  volumes:
    - flower_data:/flower
  command:
    celery -A proj flower --port=5555 --persistent=True --db=/flower/flower

但是,我得到:

IOError: [Errno 13] Permission denied: 'flower.dat'

我运行了以下内容来说明原因:

    bash -c "ls -al /flower; whoami; celery -A proj flower --persistent=True --db=/flower/flower"

这说明了原因:

flower_1 | drwxr-xr-x 3 root root 4096 Mar 10 23:05 .
flower_1 | drwxr-xr-x 7 root root 4096 Mar 10 23:05 ..

也就是说,该目录挂载为root,但在[base code image] 中,我确保运行的用户是非 root,因为根据 Celery 的码头永远不会以 root 身份运行:

FROM python:2.7
...
RUN groupadd user && useradd --create-home --home-dir /usrc/src/app -g user user
USER user

Celery Flower 不以 root 身份继续运行但能够使用此命名卷的最佳方式是什么?

【问题讨论】:

    标签: docker permissions celery docker-compose flower


    【解决方案1】:

    以下工作:在Dockerfile中,安装sudo并将user添加到sudo组,需要密码:

    RUN apt-get update
    RUN apt-get -y install sudo
    RUN echo "user:SECRET" | chpasswd && adduser user sudo
    

    然后,在 Docker Compose 配置中,命令将是:

    bash -c "echo SECRET | sudo -S chown user:user /flower; celery -A proj flower --power=5555 --persistent --db=/flower/flower"
    

    不过,我不确定这是否是最好的方法,或者这会带来什么安全隐患。

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 2020-02-19
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多