docker - 在 tomcat docker 容器上提供 war 文件

标签 docker tomcat

我正在尝试在 docker 容器上运行我的 java 应用程序。我在本地使用 tomcat 服务器并且工作正常。我是 java/tomcat/docker 的新手,所以我可能会遗漏一些非常简单的东西,但我假设只需将我的本地 war 文件指向 /usr/local/tomcat/webapps 就足够了.

这是我的 docker-compose.yml

tomcat-dev:
  image: tomcat:8.5.38
  environment:
    - TOMCAT_USERNAME=root
    - TOMCAT_PASSWORD=root
  ports:
    - "8888:8080"
  volumes:
    - /target/npmanager.war:/usr/local/tomcat/webapps/npmanager.war

mysql-dev:
  image: mysql:8.0.2
  environment:
    MYSQL_ROOT_PASSWORD: root
    MYSQL_DATABASE: npmanagercd
  volumes:
    - /mysql-data:/var/lib/mysql
  ports:
    - "3308:3306"

我可以在 webapps 目录中看到 npmanager.war 文件,但我无法访问我的应用程序。当我从本地安装的 tomcat 运行它时,我的本地主机仍然显示 tomcat 页面,而不是我看到的“Hello, World”。

关于在 tomcat 上部署 war 文件,我是否遗漏了什么?

最佳答案

好的,所以我终于让它工作了。如果对其他人有帮助,我想在这里发布这个答案,但老实说,我不确定我是否完全理解它。

我必须为 tomcat 镜像创建一个单独的 Dockerfile:

FROM tomcat:8.5.38
ADD ./target/npmanager.war /usr/local/tomcat/webapps/
CMD chmod +x /usr/local/tomcat/bin/catalina.sh
CMD ["catalina.sh", "run"]

然后在 docker-compose.yml 中构建该图像

version: '3'

services:

tomcat-dev:
  build: .
  environment:
    TOMCAT_USERNAME: root
    TOMCAT_PASSWORD: root
  ports:
    - "8888:8080"

mysql-dev:
  image: mysql:8.0.2
  environment:
    MYSQL_ROOT_PASSWORD: root
    MYSQL_DATABASE: npmanager
  volumes:
    - /mysql-data:/var/lib/mysql
  ports:
    - "3308:3306"

关于docker - 在 tomcat docker 容器上提供 war 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55202796/

相关文章:

installation - LXC-Docker 依赖失败

docker: 拉取镜像时出现 "first record does not look like a TLS handshake"错误

linux - 如何让 docker 在 Ubuntu 16 上运行并删除旧安装?

node.js - Docker 环境变量、dokku-redis

docker - cron作业未在docker容器中执行

tomcat - 如何将 .war 文件和 jni 库文件部署到 Web 服务器上?

java - 有没有办法使用 Tomcat API 从应用程序内部重新启动 webapp?

tomcat - 在 Amazon EC2 上部署 Grails 应用程序

eclipse - tomcat 和 eclipse : starting server

tomcat - linux 中的 keytool 导入证书 java.util.IllegalFormatConversionException