2016-03-02 134 views
4

我试图在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) 

我错过了什么?

以斯哈

回答

6

通过FileResolver.java来看,vert.x试图创建默认情况下在当前工作目录下的“.vertx”目录。你已经配置了一个叫做“守护进程”的用户,你确定这个用户对docker映像中的工作目录有写权限吗?如果不是,请按照docker-image-author-guidance中所述更改权限,或者恢复为使用root用户。

+0

谢谢,我删除了后台程序定义,并添加了权限设置,这解决了这个问题。 –

0

vert.x尝试在当前目录中创建缓存目录(.ver​​tx/file-cache-someuuid)。如果mkdirs()调用失败,则会抛出给定的异常。 用户守护进程在workdir中有足够的权限吗?

2

此目录用于提供jar文件中包含的文件(例如打包在一个fat jar中的web资源)。如果您不使用此功能,可以通过将vertx.disableFileCPResolving系统属性设置为true来禁用此目录的创建。您还可以使用vertx.cacheDirBase系统属性更改位置。

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