Docker-compose 和命名卷权限被拒绝

Ent*_*rSB 15 docker docker-compose

docker-compose 使用基础 Dockerfile 创建应用程序映像。

Dockerfile 看起来与下面类似。由于某些原因省略了一些行。

FROM ubuntu:18.04

RUN set -e -x ;\
    apt-get -y update ;\
    apt-get -y upgrade ;

...

USER service
Run Code Online (Sandbox Code Playgroud)

在 docker-compose 中使用此映像并将命名卷添加到服务时,命名卷中的文件夹无法访问,并显示消息Permission denied。docker-compose 的部分如下所示。

FROM ubuntu:18.04

RUN set -e -x ;\
    apt-get -y update ;\
    apt-get -y upgrade ;

...

USER service
Run Code Online (Sandbox Code Playgroud)

我的假设是USER service线路有问题,我通过user: root在 myapp 服务中设置来确认这一点。

现在,下一个问题是。我想避免手动创建卷和设置权限。我希望使用 docker-compose 来自动化它。

这可能吗?如果可以,如何做到这一点?

Maf*_*for 14

是的,有一个技巧。并不是真正在 docker-compose 文件中,而是在 Docker 文件中。/var/log/myapp在切换用户之前,您需要创建文件夹并设置其权限service

FROM ubuntu:18.04

RUN useradd myservice
RUN mkdir /var/log/myapp
RUN chown myservice:myservice /var/log/myapp

...

USER myservice:myservice
Run Code Online (Sandbox Code Playgroud)

Docker-compose 将保留权限。

请参阅Docker Compose 将命名卷专门安装为“root”

  • @EnterSB 对于主机文件夹,情况更糟,上面的技巧不起作用。不过还有另一个黑客。请参阅我对此问题的答复:/sf/answers/4480447681/ (2认同)