在Docker容器中运行Maven Web应用程序

8

我正在尝试使用Maven构建一个简单的Web应用程序,并在Tomcat7中运行,放置于Docker容器内。

这是我的文件结构:

- Dockerfile
- pom.xml
- src/main/webapp/index.hmtl

这是我的 Dockerfile 文件:
FROM java:8

# Install maven
RUN apt-get -y update && apt-get install -y maven

WORKDIR /code

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml

# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]

EXPOSE 8080
CMD ["mvn", "tomcat7:run"]

我正在使用以下命令构建Docker镜像:

docker build .

docker build -t webapp-example .

尝试使用以下命令运行它:

docker run -d -p 8080:8080 webapp-example

但显然它无效。 有任何想法吗?

你的日志里有任何错误吗? - yorammi
1
你能否尝试运行以下命令 docker run -ti --rm -p 8080:8080 webapp-example,并将细节粘贴在这里? - GauravJ
我没有任何错误,日志在容器外运行“mvn tomcat7:run”时是正常的。@GauravJ,由于某种原因,使用您的命令,我的应用程序正在运行!非常感谢! - luthien
1个回答

4

如果您使用以下命令在tty和interactive模式下运行,则可以解决问题:

docker run -ti --rm -p 8080:8080 webapp-example

这是因为您的基础镜像是java:8,它主要用于在前端模式(使用-ti标志)中运行应用程序或仅在-d模式下进行编译。

另外,由于maven是构建工具而不应用于运行应用程序,您应该执行以下操作:

  1. 使用最新的maven镜像创建您的Web应用程序。
  2. 作为独立的Tomcat容器使用官方Tomcat镜像进行部署。

谢谢你的建议。由于我对Docker还很陌生,不太确定如何操作,所以我想这两个步骤应该通过Docker compose来合并,是吗? - luthien
这取决于您如何运行应用程序。通常,创建war文件和部署它是两个不同的步骤。如果您正在使用Jenkins,则需要2个作业/构建流水线。如果您仍然想要将它们一起完成,那么docker-compose是一个不错的选择。 - GauravJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接