Docker tomcat通过dockerfile编辑配置文件

Kri*_*e93 5 containers tomcat docker dockerfile docker-compose

我已经创建了一个dockerfile和docker-compose,如下所示,这是在容器内创建tomcat映像并编辑tomcat用户的后缀,以便我能够访问manager gui。
下面的四个文件都与运行docker-compose up命令的位置在同一文件夹中。

docker-compose.yml

version: '2'

services:
  tomcat:
    build: .
    container_name: development
    ports:
      - 8001:8080
    environment:
      - spring.profiles.active=development
Run Code Online (Sandbox Code Playgroud)

Docker文件

FROM tomcat
COPY tomcat-users.xml /usr/local/tomcat/conf/
COPY context.xml /usr/local/tomcat/webapps/manager/META-INF/
CMD ["catalina.sh","run"]
Run Code Online (Sandbox Code Playgroud)

tomcat-users.xml

<?xml version='1.0' encoding='cp1252'?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
          version="1.0">
    <user username="manager" password="pass" roles="manager-gui,manager-script"/>
    <user username="admin" password="pass" roles="tomcat"/>
</tomcat-users>
Run Code Online (Sandbox Code Playgroud)

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true" >
   <!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"
        allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->
</Context>  
Run Code Online (Sandbox Code Playgroud)

当我运行命令docker-compose up时,它会完美地生成带有tomcat映像的容器,但是现有的tomcat-users.xml和context.xml不会被覆盖。知道我在覆盖这两个文件时做错了什么吗?

Kri*_*e93 6

我想到了。问题是我执行构建任务的用户没有足够的权限在这些文件夹中写入内容。我所做的是将USER root任务添加到 Dockerfile,以便它以 root 身份执行所有命令。

我的 Dockerfile 现在看起来像这样:

FROM tomcat
USER root
COPY tomcat-users.xml /usr/local/tomcat/conf/
COPY context.xml /usr/local/tomcat/webapps/manager/META-INF/
CMD ["catalina.sh","run"]
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,除非您在最后的“CMD”之前添加“USER”,否则您将以“root”身份运行tomcat,这会带来严重的安全风险。不是这样吗? (3认同)