首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Vert.x的应用程序在码头容器上崩溃

基于Vert.x的应用程序在码头容器上崩溃
EN

Stack Overflow用户
提问于 2016-03-02 13:28:09
回答 5查看 5K关注 0票数 6

我试图在Docker容器上运行一个基于Vert.x Java的应用程序。我的应用程序很少运行它从内部引发的眩晕。我将jar文件放在一个文件夹中,并创建了一个具有以下内容的Dockerfile:

代码语言:javascript
复制
FROM vertx/vertx3
ENV VERTICLE_FILE Medical-1.0-SNAPSHOT.jar 
ENV VERTICLE_HOME /performit/web/vertx/verticles/
COPY $VERTICLE_FILE $VERTICLE_HOME/  
WORKDIR $VERTICLE_HOME
ENTRYPOINT ["sh", "-c"]
EXPOSE 8080
CMD ["java -jar $VERTICLE_FILE"]
USER daemon

我用命令创建一个图像

代码语言:javascript
复制
$ sudo docker build -t medical-main .

然后,我尝试使用以下行创建一个容器:

代码语言:javascript
复制
sudo docker run --name medical-main -p 8080:8080 -d  medical-main

此操作失败,日志显示以下内容:

代码语言:javascript
复制
java.lang.IllegalStateException: Failed to create cache dir
at io.vertx.core.impl.FileResolver.setupCacheDir(FileResolver.java:257)
at io.vertx.core.impl.FileResolver.<init>(FileResolver.java:79)
at io.vertx.core.impl.VertxImpl.<init>(VertxImpl.java:138)
at io.vertx.core.impl.VertxImpl.<init>(VertxImpl.java:114)
at io.vertx.core.impl.VertxImpl.<init>(VertxImpl.java:110)
at io.vertx.core.impl.VertxFactoryImpl.vertx(VertxFactoryImpl.java:34)
at io.vertx.core.Vertx.vertx(Vertx.java:79)

我遗漏了什么?

伊扎尔

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-03-02 15:35:58

FileResolver.java判断,vert.x默认情况下会在当前工作目录中创建一个".vertx“目录。您已经配置了一个名为“守护进程”的用户,您确定这个用户对docker映像中的工作dir有写访问权吗?如果没有,请按码头工人-形象-作者-指南中所述更改权限,或恢复使用根用户。

票数 8
EN

Stack Overflow用户

发布于 2016-04-29 12:56:28

此目录用于服务jar文件中包含的文件(例如,打包在fat jar中的web资产)。如果不使用此功能,则可以通过将vertx.disableFileCPResolving系统属性设置为true来禁用此目录的创建。还可以使用vertx.cacheDirBase system属性更改位置。

参考资料:https://groups.google.com/forum/#!topic/vertx/7cBbKrjYfeI

票数 5
EN

Stack Overflow用户

发布于 2018-08-29 14:32:58

此异常是在Vert.x试图创建.vertx (缓存dir)以便从类路径或类路径上的文件复制和读取文件时引起的。有可能,$user没有创建缓存目录的权限。

缓存dir背后的原因很简单:从jar或输入流读取文件是阻塞的。因此,为了避免每次都要付出代价,Vert.x将文件复制到它的缓存目录,并在那里读取后续的每次读取。可以配置此行为。

代码语言:javascript
复制
vertx run my.Verticle -Dvertx.cacheDirBase=/tmp/vertx-cache
# or
java -jar my-fat.jar -Dvertx.cacheDirBase=/tmp/vertx-cache

否则,您可以完全避免这种行为,使用-Dvertx.disableFileCaching=true启动应用程序。在此设置下,Vert.x仍然使用缓存,但始终使用原始源刷新缓存中存储的版本。因此,如果编辑从类路径中提供的文件并刷新浏览器,Vert.x将从类路径读取该文件,将其复制到缓存目录并从那里提供服务。在生产中不使用此设置,它会扼杀您的性能。

链接到文档

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35748582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档