我已经从here构建了一个tomcat docker镜像。
我想将tomcat文件夹映射到主机,所以我可以简单地访问它,主要是我需要webapps
和logs
文件夹。只需要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中找不到可执行文件“:未知。
有什么建议吗?
答案 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>