有一个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将其自动化。
这可能吗?如果可以,怎么办?
答案 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