DR
在Tomcat中运行web应用程序时,Docker引擎不会执行Spring Boot应用程序。properties文件中定义的server.port
属性。
背景:
FROM tomcat
EXPOSE 8000
RUN rm -rf /user/local/tomcat/webapps/*
COPY ./target/my-web-app.war /usr/local/tomcat/webapps/ROOT.war
CMD ["catalina.sh","run"]
spring.application.name=my-web-app
server.port=8000
spring.jpa.show-sql=true
spring.h2.console.enabled=true
CK@Ping MINGW64 /c/Program Files/Docker Toolbox
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myrepo/my-web-app 0.0.1-SNAPSHOT 625e9d889139 4 minutes ago 694MB
启动容器:
请注意,我将Spring Bootapplication.properties
文件的server.port
映射到外部端口。
docker run -p 8000:8000 -d myrepo/my-web-app:0.0.1-SNAPSHOT
docker容器ls输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3eff09347de3 myrep/my-web-app:0.0.1-SNAPSHOT "catalina.sh run" Less than a second ago Up 4 seconds 0.0.0.0:8000->8000/tcp, 8080/tcp hardcore
This site can’t be reached
http://192.168.99.100:8000/my-web-app/getResults
当从Eclipse而不是Docker容器启动时,相同的应用程序工作得很好,我可以使用以下方法访问restendpoint:
http://localhost:8000/my-web-app/getResults
更新/编辑:
我找到了根本原因。我需要将端口8000映射到8080,而不是将8000映射到8000本身:
docker run -p 8000:8080 -d myrepo/my-web-app:0.0.1-SNAPSHOT
但是,如果我在Eclipse而不是Docker容器中运行相同的应用程序,tomcat将在server.port
指定的端口上启动。
底线:在Spring Boot Application.properties文件中定义的server.port
属性没有得到Docker引擎的支持。
server.port
属性用于配置spring boot嵌入式服务器的端口。在您的示例中,您试图将war
文件与您的应用程序一起部署到独立的tomcat服务器(它包含在您的映像中)-因此,甚至没有使用嵌入式Spring Boot服务器,设置该属性也没有任何效果。
要实现所需的功能,必须修改映像上安装的tomcat的server.xml
文件,并修改连接器端口。因此,您可以将重写的server.xml
复制到您的映像中:
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<!-- change port here-->
<Connector port="8000" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
和dockerfile:
FROM tomcat:9.0
EXPOSE 8000
COPY ./target/my-web-app.war /usr/local/tomcat/webapps/ROOT.war
#override server.xml
COPY server.xml /usr/local/tomcat/conf/
CMD ["catalina.sh","run"]
docker run -p 8000:8000 -d myrepo/my-web-app:0.0.1-SNAPSHOT
docker container run -e SERVER_PORT=8000 -p 8000:8000 myimage
我正在将一个非常基本的web应用程序部署到Google应用程序引擎。我使用的是Springboot,我可以在本地很好地运行应用程序,但当我部署到Google时,应用程序引擎不会启动实例。我在启动时配置了一个云SQL数据源。 我有云sql配置属性配置src/main/Resources/application.properties.App Engine似乎找不到这些属性,所以它无法正确设置Cloud
我正在读取google appengine应用程序中文件夹(/war/config/client.properties)中的属性文件。它在我的本地服务器上运行良好,但在生产模式下不工作,并且抛出异常java。安全AccessControlException:拒绝访问(java.io.FilePermission)。 你能告诉我如何在生产模式下工作吗。
我们正在使用SpringSecurityACL基础设施与AppEngine数据存储相结合。我们不使用低级数据存储API,而是使用Objectify框架访问数据存储。我们需要将Spring SecurityACL模型(适用于RDBMS)转换为更适用于无模式面向对象数据存储的模型。到目前为止,我们已经完成了下面描述的两个实体。 国际计算语言学协会 id:Long 阿兰特里 sid:字符串 负责人:布尔
我正试图从我的网站下载一个HTTPS页面,该页面由SNI托管在谷歌应用程序引擎上。无论我使用什么库,都会出现以下错误: 我尝试了多种方法来解决此错误,包括使用urllib3 openssl monkeypatch: 但是我总是得到上面提到的同样的错误。 有什么想法吗?
如何配置我的应用程序引擎应用程序的内存(RAM)使用情况?我试图解决与超过实例内存限制相关的错误。我尝试过这些东西,到目前为止,它们不起作用或者不能提供我需要的东西。 Appstats。这不提供内存使用的详细信息 以上任何一点我都错了吗?在这个问题上,评分最高的答案(不是公认的答案)表示没有办法监控App Engine上的内存使用情况。那不可能是真的。可以吗? 编辑 我可以确认GAE mini p
我正在寻找关于如何建立一个谷歌应用引擎项目的建议,该项目涉及多个模块,其中一个模块是GWT项目。我已经阅读了谷歌应用引擎模块文档(https://developers.google.com/appengine/docs/java/modules/)并在Stackoverflow上找到了一些帮助,比如本文使用appengine骨架原型发布GWT GAE应用程序引擎模块。然而,这涉及到很多东西,所以我