docker - 运行 Docker 映像的问题
问题描述
我有一个可以在 localhost:8080 本地运行的测试 Web 应用程序。我用 Maven 构建我的应用程序:
mvn clean install -U
我使用以下 maven 命令运行应用程序:
mvn org.codehaus.mojo:tomcat-maven-plugin:run
然后我可以点击 localhost url: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 有一定经验的人的意见,并且可以阐明这个问题。
解决方案
您实际上并没有在 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
推荐阅读
- c# - C# WPF 应用程序和 python 脚本之间的双向通信
- mysql - 表中有多个 json 列有什么缺点吗
- javascript - 编写一个 angularToHTML 函数
- laravel - Laravel/Passport 客户端 user_id 有什么用?
- dart - 如何在颤动中删除 GridView 项目?
- c# - JsonIgnore 不适用于序列化中的 MemberSerialization.Fields
- ionic-framework - 如何在不将我重定向到另一个页面的情况下保持 BarcodeScanner 屏幕打开?
- jquery - 当我单击按钮时,内容首先出现,然后消失。为什么?我该如何解决?
- python - 通过多对多枚举相关对象
- javascript - Javascript 函数适用于 JSFiddle 但不适用于我的 HTML 文档?