基于Vert.x的应用程序在Docker容器上崩溃
问题描述:
我试图在Docker容器上运行Vert.x基于Java的应用程序。我的应用程序运行几个从其内部启动的Verticle。 我已经把jar文件的文件夹上,创造了Dockerfile具有以下内容:基于Vert.x的应用程序在Docker容器上崩溃
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”目录。你已经配置了一个叫做“守护进程”的用户,你确定这个用户对docker映像中的工作目录有写权限吗?如果不是,请按照docker-image-author-guidance中所述更改权限,或者恢复为使用root用户。
答
vert.x尝试在当前目录中创建缓存目录(.vertx/file-cache-someuuid)。如果mkdirs()调用失败,则会抛出给定的异常。 用户守护进程在workdir中有足够的权限吗?
答
此目录用于提供jar文件中包含的文件(例如打包在一个fat jar中的web资源)。如果您不使用此功能,可以通过将vertx.disableFileCPResolving系统属性设置为true来禁用此目录的创建。您还可以使用vertx.cacheDirBase系统属性更改位置。
参考: https://groups.google.com/forum/#!topic/vertx/7cBbKrjYfeI
谢谢,我删除了后台程序定义,并添加了权限设置,这解决了这个问题。 –