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

Izh*_*tem 6 java vert.x dockerfile

我正在尝试在Docker容器上运行基于Vert.x Java的应用程序.我的应用程序运行很少的Verticle,它从内部启动.我把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
Run Code Online (Sandbox Code Playgroud)

我用命令创建一个图像

$ sudo docker build -t medical-main .
Run Code Online (Sandbox Code Playgroud)

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

sudo docker run --name medical-main -p 8080:8080 -d  medical-main
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

以斯哈

Ale*_*ing 8

根据FileResolver.java判断,vert.x默认尝试在当前工作目录中创建".vertx"目录.您已配置名为"守护程序"的用户,您确定此用户对docker镜像中的工作目录具有写入权限吗?如果没有,请按照docker-image-author-guidance中所述更改权限,或者还原为使用root用户.


小智 5

该目录用于提供jar文件中包含的文件(例如,打包在胖jar中的Web资产)。如果您没有使用此功能,则可以通过将vertx.disableFileCPResolving系统属性设置为true来禁用此目录的创建。您也可以使用vertx.cacheDirBase系统属性更改位置。

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