Tomcat docker公开webapps和logs文件夹

时间:2018-03-12 01:33:43

标签: tomcat docker

我已经从here构建了一个tomcat docker镜像。

我想将tomcat文件夹映射到主机,所以我可以简单地访问它,主要是我需要webappslogs文件夹。只需要webapps文件夹来部署war文件,logs文件夹用于从主机进行日志跟踪。

所以我通过映射整个tomcat文件夹使其变得更简单:

docker run -ti --rm -p 8888:8080 -v C:/data:/usr/local/tomcat/ <image>

但我收到了这个错误:

  

docker:来自守护程序的错误响应:OCI运行时创建失败:   container_linux.go:296:启动容器进程导致“exec:   \“catalina.sh \”:$ PATH中找不到可执行文件“:未知。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

在你链接的tomcat docker文件中,第3行:

ENV CATALINA_HOME /usr/local/tomcat

这意味着,当您将C:\ data挂载到/ usr / local / tomcat /时,您将删除tomcat所需的几乎所有文件以便运行,包括catalina.sh被抱怨。 Docker绑定挂载的卷不是附加的,因此当您将C:\ data挂载到/ usr / local / tomcat /时,您完全用C中的内容替换/ usr / local / tomcat中存在的内容:\数据

要在此处执行您想要的操作,请考虑更改tomcat查找Web应用程序和日志记录的默认位置。 Here's a helpful SO answer to get you going in the right direction

然后你会做这样的事情:

docker run -ti --rm -p 8888:8080 -v C:/data/webapps:/webapps -v C:/data/logs:/logs <image>

答案 1 :(得分:0)

如Dockerfile中所指定,使用CMD ["catalina.sh", "run"]下的/usr/local/tomcat命令启动容器。

当您将主机上的现有目录挂载到/usr/local/tomcat时,/usr/local/tomcat上容器内的内容将与主机目录相同。这导致找不到启动脚本catalina.sh

要解决此问题,您可以在主机上指定一个非现有目录,该目录将被创建。

docker run --rm -p 8888:8080 -v C:/data/tomcat:/usr/local/tomcat/ <image>

其中C:/data/tomcat不存在或使用具有特定安装点的命名卷:

docker volume create --name tomcat-data -o type=none -o device=C:/data/tomcat -o o=bind

docker run -ti --rm -p 8888:8080 -v tomcat-data:/usr/local/tomcat/ <image>