我试图在Docker容器上运行一个基于Vert.x Java的应用程序。我的应用程序很少运行它从内部引发的眩晕。我将jar文件放在一个文件夹中,并创建了一个具有以下内容的Dockerfile:
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我用命令创建一个图像
$ sudo docker build -t medical-main .然后,我尝试使用以下行创建一个容器:
sudo docker run --name medical-main -p 8080:8080 -d medical-main此操作失败,日志显示以下内容:
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)我遗漏了什么?
伊扎尔
发布于 2016-03-02 15:35:58
从FileResolver.java判断,vert.x默认情况下会在当前工作目录中创建一个".vertx“目录。您已经配置了一个名为“守护进程”的用户,您确定这个用户对docker映像中的工作dir有写访问权吗?如果没有,请按码头工人-形象-作者-指南中所述更改权限,或恢复使用根用户。
发布于 2016-04-29 12:56:28
此目录用于服务jar文件中包含的文件(例如,打包在fat jar中的web资产)。如果不使用此功能,则可以通过将vertx.disableFileCPResolving系统属性设置为true来禁用此目录的创建。还可以使用vertx.cacheDirBase system属性更改位置。
参考资料:https://groups.google.com/forum/#!topic/vertx/7cBbKrjYfeI
发布于 2018-08-29 14:32:58
此异常是在Vert.x试图创建.vertx (缓存dir)以便从类路径或类路径上的文件复制和读取文件时引起的。有可能,$user没有创建缓存目录的权限。
缓存dir背后的原因很简单:从jar或输入流读取文件是阻塞的。因此,为了避免每次都要付出代价,Vert.x将文件复制到它的缓存目录,并在那里读取后续的每次读取。可以配置此行为。
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将从类路径读取该文件,将其复制到缓存目录并从那里提供服务。在生产中不使用此设置,它会扼杀您的性能。
https://stackoverflow.com/questions/35748582
复制相似问题