2016-03-02 193 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