我有一个简单的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用户创建这些。
答案 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
答案 1 :(得分:-1)
Docker通常以root权限运行,因此我认为您必须创建一个docker组(如果它不存在),并将用户(在您的情况下为tomcat)添加到docker组。
请参阅下文,了解如何将用户添加到泊坞窗组:
创建泊坞组。
$ sudo groupadd docker
将您的用户添加到泊坞窗组。
$ sudo usermod -aG docker tomcat
有了这个,我相信你的问题可以解决。