码头工人组成和命名卷权限被拒绝

时间:2020-09-23 11:34:00

标签: 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

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

version: "3.1"
    services:
        myapp:
            image: myappimage
            command:
                - /myapp
            ports:
                - 12345:1234
            volumes:
                - logs-folder:/var/log/myapp

volumes:
    logs-folder:

我以为USER service行是问题,我通过在myapp服务中设置user: root来确认。

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

这可能吗?如果可以,怎么办?

1 个答案:

答案 0 :(得分:1)

是的,有个窍门。不是真正在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

Docker-compose将保留权限。

请参见Docker Compose mounts named volumes as 'root' exclusively