我有一个测试Web应用程序,可以在localhost:8080上本地运行。我使用Maven构建应用程序:
mvn clean install -U
我使用以下maven命令运行该应用程序:
mvn org.codehaus.mojo:tomcat-maven-plugin:run
然后我可以访问localhost网址:http://localhost:8080/pokemon/healthcheck 这是一个简单的测试应用程序,我只想对自己进行学习以对接。我能够运行python“ Hello World”示例,因此我认为我已将所有安装在正确的位置。我的Dockerfile具有以下内容:
FROM tomcat:alpine
RUN ["/bin/rm", "-fr", "/usr/local/tomcat/webapps/ROOT"]
RUN ["/bin/mkdir", "/var/log/tomcat8/"]
COPY target/pokemon.war /usr/local/tomcat/webapps/pokemon.war
然后,我停止本地运行的本地主机,假设我需要这样做,然后使用以下命令构建映像:
docker build -t pokesheets .
然后我尝试使用以下命令运行它:
docker run -it pokesheets:latest
该日志对我来说看起来不错,我在日志中看到该服务已启动的消息。容器正在运行,我可以看到它。但是我无法进入http://localhost:8080/pokemon/healthcheck。因此,我也尝试使用以下命令运行docker映像:
docker run -it -p 8080:8080 pokesheets:latest
docker run -d --name pokesheets -p 8090:8090 -p 8091:8091 pokesheets:latest
docker run --rm -p 8080:8080 pokesheets:latest
docker container run -d --name pokesheets -p 8080:8080 pokesheets:latest
我怀疑也许有一些我不了解的非常基本的东西。我非常感谢来自对Docker有一定经验并且可以阐明问题的人员的意见。
答案 0 :(得分:1)
您实际上并没有在Docker容器中运行服务器。
您构建它并将文件复制到其中,但是您没有启动服务器。
使用ENTRYPOINT指令。
编辑:
Tomcat官方Docker镜像存储库指定使用CMD指令,并且还使用:8888
端口。
CMD ["catalina.sh", "run"]
编辑2:
构建图片:docker build -t pokesheets .
FROM tomcat:alpine
RUN ["/bin/rm", "-fr", "/usr/local/tomcat/webapps/ROOT"]
RUN ["/bin/mkdir", "/var/log/tomcat8/"]
ADD target/pokemon.war /usr/local/tomcat/webapps/pokemon.war
EXPOSE 8080
CMD ["catalina.sh", "run"]
运行容器
docker run -it -p 80:8080 pokesheets:latest
访问http://localhost:8080/pokemon/healthcheck