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

标签 java dockerfile vert.x

我正在尝试在 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/

相关文章:

git - 如何使用Docker在Heroku Review App中的PATH上获取GIT?

docker - dockerfile 维护的最佳实践?

java - 使用 Vertx JDBC 处理程序批量插入数组

java - vert.x spring boot swagger 集成

Java Android : onTouchListener release?

java - 如何从Sql中插入和获取数据

azure - 如何从azure devops构建服务器清理docker镜像

java - Vert.x如何在lambda函数中添加类型参数到promise

java - 为什么 Google OAuth 2.0 代码 token 交换返回 "invalid_request"?

java - Android AndEngine : java. lang.IllegalArgumentException: 未找到 EGLConfig