Docker tomcat通过dockerfile编辑配置文件

Docker tomcat通过dockerfile编辑配置文件,tomcat,docker,containers,docker-compose,dockerfile,Tomcat,Docker,Containers,Docker Compose,Dockerfile,我已经创建了一个dockerfile和docker compose,如下所示,它支持在我的容器中创建tomcat的图像并编辑tomcat用户,以便我能够访问manager gui。 下面的四个文件都位于我运行docker compose up命令的文件夹中 docker compose.yml version: '2' services: tomcat: build: . container_name: development ports: - 8001

我已经创建了一个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
<?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>
<?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>  
Dockerfile

FROM tomcat
COPY tomcat-users.xml /usr/local/tomcat/conf/
COPY context.xml /usr/local/tomcat/webapps/manager/META-INF/
CMD ["catalina.sh","run"]
tomcat users.xml

version: '2'

services:
  tomcat:
    build: .
    container_name: development
    ports:
      - 8001:8080
    environment:
      - spring.profiles.active=development
<?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>
<?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>  

context.xml

version: '2'

services:
  tomcat:
    build: .
    container_name: development
    ports:
      - 8001:8080
    environment:
      - spring.profiles.active=development
<?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>
<?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>  


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

我明白了。问题是,与我一起执行构建任务的用户没有足够的权限在这些文件夹中写入内容。我所做的是向Dockerfile添加一个用户根任务,以便它以根用户身份执行所有命令

我的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"]

我无法重现这种行为。您是否尝试过使用
docker compose build和&docker compose up-d
重建图像?还要考虑<代码> DOCKEXEC——它BASH ,以检查文件是否如预期一样不能复制。在我看来,使用正确的文件,图像看起来很好。正如Jan Trienes提到的,我会尝试使用docker compose up build来确保图像得到重建。感谢您的回复。我发现了问题所在,并在下面的答案中进行了解释。对于这个问题,如果答案正确,你应该接受你自己的答案。在我看来,除非你在最后的
CMD
之前添加一个
USER
,否则你将以
root
的身份运行tomcat,这会带来严重的安全风险。不是吗?