Docker官方Tomcat镜像修改Server.xml并将jar添加到lib文件夹

我想在lib文件夹中添加MySQL jar文件,并且需要在tomcat官方tomcat镜像的tomcat conf文件夹的server.xml文件中添加一些JNDI设置。 但我不知道如何更改到tomcat的conf文件夹文件。 我正在使用下面的Dockerfile来build立tomcat映像

 FROM openjdk:8-jre-alpine FROM tomcat ADD ./test.war /usr/local/tomcat/webapps/ RUN sh -c 'touch /usr/local/tomcat/webapps/test.war' VOLUME /usr/local/tomcat/webapps/ EXPOSE 8080 

Docker撰写文件是

 version: '2' services: app-tomcat: container_name: app-server-tomcat image: symserver:latest external_links: - app-mysql:app-mysql ports: - 8080:8080 environment: - "JAVA_OPTS=-Ddatabase.url=192.168.99.100" 

我已经尝试COPY ./server.xml /usr/local/tomcat/conf/上面的文件,但我得到下面的错误。

 docker-compose -f app.yml up ERROR: for xboard-tomcat No such image: sha256:34aefb95b68da96e5a5a6cb8b12bb85d926d9d1e5bea2c6c13d1ff9c00d4426d ←[31mERROR←[0m: Encountered errors while bringing up the project. 

OP是旧的,但我遇到了谷歌search一种方式来更新Tomcat的官方docker图像server.xml。 我想添加我的解决scheme。

使用案例:我的公司具有从其他应用程序(在Websphere Liberty下运行)生成并保存到共享目录的静态html文件。 共享目录也安装在我们的Tomcat容器中,但没有安装在任何Web应用程序目录中,所以默认情况下tomcat无法访问它。 官方的Tomcat docker镜像包含一个默认的server.xml文件,所以我需要更新这个文件来指定Tomcat可以search内容的附加目录。

最初的想法:最初,我认为最好编写一个bash脚本,只需将我的更改应用到server.xml而不覆盖整个文件。 考虑到这一点后,我得出结论,如果默认的server.xml文件改变(由于图像更新),然后可能会发生意外的行为,这将需要更新bash脚本,因此,我放弃了这个想法。

解决scheme :复制映像的server.xml文件,进行更改并在Dockerfile中添加COPY指令,以使用我的更改覆盖默认的server.xml。 如果图像更新并且默认的server.xml文件发生变化,那么我将需要更新我的副本,但我宁愿这样做,而不是向我们的回购中引入更多的代码。

Dockerfile:

 FROM tomcat:7-jre8 

构build并运行官方Tomcat映像:

 docker build -t tomcat:official . 

将server.xml复制到本地文件系统:

 docker run tomcat:official tar -c -C /usr/local/tomcat/conf server.xml | tar x 

更改server.xml文件的本地副本,并确保它与Dockerfile位于同一目录中。

在我的情况下,我不得不在“主机”标签之间添加以下行

 <Context docBase="/mnt/html/Auto/Reports" path="/Auto/Reports" /> 

更新Dockerfile:

 FROM tomcat:7-jre8 COPY server.xml /usr/local/tomcat/conf/ 

注意:我公司目前使用Tomcat映像的“tomcat:7-jre8”版本,但是可以在这里find所有版本的列表。

这样可以帮助别人。