我一直在研究tomcat在docker上的最佳实践以及如何链接WAR文件。
遇到的两种方法是:
- 扩展tomcat基本映像,并将WAR文件复制到
/webapps
,然后重新构建该映像。 - 使用两个容器,第一个是tomcat,第二个是数据容器,例如busybox,其中包含WAR文件。然后将busybox容器挂载到
/webapps
上的tomcat容器上,WAR文件将被有效地拾取。
我喜欢第二种方法的声音,但是我一直无法成功地让它工作。
我尝试使用busybox创建一个数据容器,然后使用docker compose启动服务。WAR不会被复制,并且busybox容器会立即停止运行。
Dockerfile:
FROM busybox
RUN mkdir /webapps
COPY ./demo.war /webapps/demo.war
VOLUME ['/webapps']
docker-compose.yml
version: '2'
services:
data:
image: <Data Container Image>
tomcat:
image: tomcat:8.5.4-jre8
volumes_from:
- data
ports:
- "678:8080"
运行docker-compose up
后,WAR文件没有被复制,busybox容器立即退出。
感谢您的帮助。
数据容器根据定义退出,即它的DNA。
您需要将其作为卷公开或使用
version: '2'
services:
data:
image: <Data Container Image>
volumes:
- webapps:/webapps
tomcat:
image: tomcat:8.5.4-jre8
volumes:
- webapps:/webapps
ports:
- "678:8080"
volumes:
webapps:
driver: local
还请注意,我没有使用volumes_from,而是使用了volumes,因为volumes_from与我认为在docker 1.11中引入的"volumes"的使用相当不一致
提示:调整tomcat容器中的挂载路径,可能是/usr/local/tomcat/webapps