dea启动应用实例后,会异步探测应用访问端口(宿主机上的端口,如:61003),如果多次探测都无法连接,dea会认为应用启动失败,随即会销毁容器,导致现场不能保留。
解决办法:
- 注释代码中的destroy
代码/var/vcap/packages/dea_next/lib/dea/task.rb,在方法:promise_destroy和destroy直接返回return
常用路径
warden.yml中
部署路径:container_depot_path:/var/vcap/data/warden/depot
例如:
java tomcat的路径:/var/vcap/data/warden/depot/186jdkndjf8/tmp/rootfs/home/vcap/app/.java-buildpack/tomcat
186jdkndjf8是部署的编号
进入容器
首先要编译warden
进warden代码目录:
# gem install bundler
# bundle install
连接容器
bundle exec bin/warden -s /var/vcap/data/warden/warden.sock
列出容器
warden> list
handles[0] : 186jdkndjf8
执行命令
warden> run --handle 186jdkndjf8 --script 'ls /home/vcap/logs'
jpetstore部署失败,原因:
jpetstore用到了spring-framework,并且用到了mybatis做O/R map,jdbc连接数据库。
dea调用buildpack探测到jpetstore这些特性后,为了实现动态替换数据库服务地址,动态的修改了web.xml,添加了jar包。
该jar包依赖的spring-context.jar包的一个类:ApplicationContextInitializer,
但jpetstore中的spring-context.jar包版本较老,不包该类,导致启动失败,错误:
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContextInitializer at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1293) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1145) |
解决办法:替换spring-context.jar为3.1以上的版本。