我花了週末的時間翻閱Docker文檔並玩弄應用程序和示例項目。我現在試圖編寫一個我自己的超級簡單的Web服務,並從一個容器中運行它。在容器中,我想我的應用程序(在引擎蓋下一個春天啓動的應用程序) - 所謂啓動時 - 具有以下目錄結構:我的應用程序在Docker中啓動時無法創建日誌文件
/opt/
bootup/
bin/
bootup.jar ==> the app
logs/
bootup.log ==> log file; GETS CREATED BY THE APP @ STARTUP
config/
application.yml ==> app config file
logback.groovy ==> log config file
需要注意的是,當我運行是非常重要的我應用程序本地在我的主機 - Docker之外 - 一切正常,包括創建日誌文件到我的主機的/opt/bootup/logs
目錄。應用端點提供了正確的內容等等。一切都很好,很棒。
所以我創建了以下Dockerfile
:
FROM openjdk:8
RUN mkdir /opt/bootup
RUN mkdir /opt/bootup/logs
RUN mkdir /opt/bootup/config
RUN mkdir /opt/bootup/bin
ADD build/libs/bootup.jar /opt/bootup/bin
ADD application.yml /opt/bootup/config
ADD logback.groovy /opt/bootup/config
WORKDIR /opt/bootup/bin
EXPOSE 9200
ENTRYPOINT java -Dspring.config=/opt/bootup/config -jar bootup.jar
然後我通過建立自己的形象:
docker build -t bootup .
然後我跑我的容器:
docker run -it -p 9200:9200 -d --name bootup bootup
我跑docker ps
:
CONTAINER ID IMAGE COMMAND ...
3f1492790397 bootup "/bin/sh -c 'java ..."
到目前爲止,太棒了!
我的應用程序應該在localhost:9200
處提供一個簡單的網頁,所以我打開我的瀏覽器到http://localhost:9200
,我什麼也沒得到。
當我使用docker exec -it 3f1492790397 bash
爲「SSH」到我的容器,我看到的一切看起來不錯,除了的目錄/opt/bootup/logs
,它應該有一個bootup.log
文件在裏面 - 在啓動時創建的 - 反而空。
我嘗試使用docker attach 3f1492790397
,然後打http://localhost:9200
在我的瀏覽器,看看是否會產生一些標準輸出(我的應用程序日誌既/opt/bootup/logs/bootup.log
以及控制檯),但不會產生任何輸出。
所以我認爲發生的事情是,當容器啓動時,並把應用程序在一個奇怪的狀態,甚至阻止它在我的應用程序(因爲某些原因)沒有權限來創建自己的日誌文件從完全啓動。
那麼請問:
- 有沒有辦法,看看有什麼用戶我的應用程序的啓動?;或
- 有沒有辦法在容器啓動的時候標準輸出?啓動後附加不幫助我,因爲我認爲當我運行
docker attach
命令應用程序已經窒息
在此先感謝!
默認情況下,您運行docker run -it image時會附加到stdout/stderr。關於應用程序的問題,您是否檢查過該應用程序是否允許在該文件夾中寫入? – German
我建立了一個項目來檢查你是否有權限問題,但是沒有。所以一切都讓我認爲你在應用程序中有一些問題。我將該示例留在:https://github.com/nitzap/so-java-docker-log – German