2017-08-27 82 views
0

我想測試保存碼頭容器的日誌文件在this site播放,它爲您提供了一個安裝了docker的Linux根shell。我心中已經使用提供here解決方案:保存碼頭日誌文件與卷產生權限被拒絕

docker run -ti -v /dev/log:/root/data --name zizimongodb mongo 

這是我在控制檯得到:

docker: Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused "process_linux.go:339: container init caused \"rootfs_linux.go:57: mounting \\\"/dev/log\\\" to rootfs \\\"/graph/overlay2/7f1eb83902e3688c0a1204c2fe8dfd8fbf43e1093bc578e4c41028e8b03e4b38/merged\\\" at \\\"/graph/overlay2/7f1eb83902e3688c0a1204c2fe8dfd8fbf43e1093bc578e4c41028e8b03e4b38/merged/root/data\\\" caused \\\"permission denied\\\"\"". 

但容器已經啓動:

$ docker ps -a 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS    NAMES 
8adaa75ba6f7  mongo    "docker-entrypoint..." 2 minutes ago  Created         zizimongodb 

docker logs -f zizimongodb回報什麼。當我停止容器時,/root/data中沒有保存任何東西。任何想法如何我可以正確保存所有日誌?

+0

你爲什麼使用'/ dev/log'?嘗試使用'/ var/log/mongodb:/ root/data' –

+0

@TarunLalwani,首先我有很多組件需要從他們的容器中獲取日誌;我想保存碼頭日誌以訪問所有這些日誌。其次,我嘗試了你的建議,停下來然後取出容器後沒有任何東西被保存。 –

+0

那是因爲'mongo'不會在'/ root/data'上共享日誌。如果你檢查mongodb容器,日誌將被髮送到'/ var/log/mongodb/mongod.log'。那麼你爲什麼期望它工作? –

回答

0

由於您使用的是DockerHub官方提供的mongo鏡像,值得指出的是官方鏡像(如官方鏡像的許多或全部)不會將日誌輸出發送到默認日誌如果您下載相同軟件的Linux發行版版本,則可能會出現這種情況。

相反,大多數能夠被告知在何處登錄的軟件都被強制登錄到stdout/stderr,以便docker日誌插件和命令本身正常工作。

對於MongoDB的情況下,你可以看到,告訴MongoDB的過程中使用映射到「標準輸出」,只要當容器開始是可寫的文件系統/proc文件描述符這個有點複雜的代碼here。由於一些錯誤,這更復雜,其他Dockerfile定製的日誌輸出(如果對註釋中的鏈接感興趣,可以閱讀更多內容)。

我認爲一種更合理的方式來嘗試和做某種形式的日誌整合或收集是閱讀約docker log drivers,看看是否有任何這些選項適合你。例如,如果您喜歡journald,則有一個驅動程序將取出所有容器日誌並將它們傳遞到主機上的日誌記錄。