2016-10-02 78 views
1

我想加入lib文件夹MySQL jar文件,需要在server.xml文件正式tomcatdocker图像的tomcat的conf文件夹中添加一些JNDI设置。但我不知道如何更改tomcat的conf文件夹文件。 我使用下面Dockerfile建立tomcat的图像泊坞窗官方Tomcat镜像修改server.xml中添加罐子lib文件夹

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 

泊坞撰写文件是

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. 
+2

为什么2 FROM语句?应该只有1 ... – chenchuk

回答

5

的OP是旧的,但我碰到它在谷歌搜索的方式来更新从Tomcat的官方泊坞窗图像在server.xml。我想添加我的解决方案。

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

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

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

Dockerfile:

FROM tomcat:7-jre8 

生成并运行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'版本,但是所有版本的列表均为can be found here

这样可以帮助别人。

+0

如果即时通讯使用Tomcat7的边车,我猜“COPY server.xml/usr/local/tomcat/conf /”会是我的自定义server.xml吗? sidecar:https://github.com/kubernetes/examples/blob/master/staging/javaweb-tomcat-sidecar/README.md –

+1

对不起@Jeryl最近的回复。是的,该命令应该将您的自定义server.xml复制到容器中的tomcat配置目录。 – mattmc

0

不能这样做也可以通过'docker volume'直接映射文件吗?我试图让它在这里工作https://github.com/djangofan/docker-cluster。 (但截至2018年3月,我不完全有它的工作)

image: tomcat 
    ports: 
    - "10001:10080" 
    expose: 
    - "10001" 
    volumes: 
    - ./cluster/server.xml:/usr/local/tomcat/conf/server.xml 
    - ./cluster/ROOT:/usr/local/tomcat/webapps/ROOT 
    - ./cluster/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml