我正在尝试在 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
我用命令创建一个图像
$ 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)
我错过了什么?
伊扎尔
最佳答案
根据 FileResolver.java 判断, vert.x 默认尝试在当前工作目录中创建一个“.vertx”目录。您已经配置了一个名为“daemon”的用户,您确定该用户对 docker 镜像中的工作目录具有写权限吗?如果不是,请更改权限,如 docker-image-author-guidance 中所述,或恢复使用根用户。
关于java - 基于 Vert.x 的应用程序在 docker 容器上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35748582/