Docker Container中的文件权限

时间:2017-12-12 08:55:10

标签: linux docker dockerfile file-permissions

我有一个简单的tomcat docker文件,如下所示。

FROM tomcat:7
MAINTAINER ***
COPY sample.war /opt/tomcat/webapps
USER tomcat
RUN chown -R tomcat:tomcat /tmp/
CMD ["catalina.sh", "run"]

当我创建泊坞窗图像时,它将为我提供文件权限

tomcat tomcat  Dec 11 08:04 tmp

我的示例应用程序在tmp文件夹中创建了几个目录,我希望所有者是tomcat但它看起来像root。由于我以用户tomcat的身份运行容器,如何使用tomcat用户创建这些。

2 个答案:

答案 0 :(得分:0)

我尝试构建并运行您提供的Dockerfile并遇到了多个错误。您询问“app”创建的文件权限。所以这是我的出发点:

我认为“app”是catalina.sh。在/tmp/中创建文件的过程。由于我们以用户tomcat运行容器,因此它会自动创建具有相应文件权限的文件。请查看下面的代码注释,以获取有关此处发生的更多信息。

Dockerfile

FROM httpd 
# I switched the image since you would need to configure tomcat to make it run
# httpd works out of the box without any application specific config. That's why

COPY ./catalina.sh /
RUN chmod +x /catalina.sh  # copy your 'app' / entrypoint into the image

RUN groupadd -r tomcat \
    && useradd -r -g tomcat tomcat
# create a new user and group under which the container runs
RUN chown -R tomcat:tomcat /tmp/  # change initial file permisisons. 
# So that our new user tomcat is allowed to access and fill the directory with files

USER tomcat  # switch the user under which the container runs

ENTRYPOINT ["/catalina.sh"]

catalina.sh

#!/bin/bash

mkdir /tmp/test  # create a dir
touch /tmp/yolo.txt  # and some files
touch /tmp/test/yolo2.txt  # to check the file permissions later on

while true; do echo "sleep"; sleep 2; done
# endless loop so that the container doesn't exit

将文件权限exec检入正在运行的容器中。

docker exec -ti <container_name> bash

enter image description here

答案 1 :(得分:-1)

Docker通常以root权限运行,因此我认为您必须创建一个docker组(如果它不存在),并将用户(在您的情况下为tomcat)添加到docker组。

请参阅下文,了解如何将用户添加到泊坞窗组:

创建泊坞组。

$ sudo groupadd docker

将您的用户添加到泊坞窗组。

$ sudo usermod -aG docker tomcat

参考:https://docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-user

有了这个,我相信你的问题可以解决。