2017-04-01 860 views

回答

3

通常的做法是容器內的應用程序不會登錄到文件,但輸出日誌stdout/stderr。容器的主要過程打印到stdout/stderr的任何內容都由碼頭工人的內置記錄設施收集,可以使用docker logs <container-name>查看。

默認情況下,日誌存儲在每個容器使用json-file登錄驅動程序,當容器本身被刪除將被刪除,但也有其他的日誌記錄程序(請參閱Configure logging drivers),讓您的日誌發送到(例如)syslog,journald,gelf

另見

+0

如果您發送的PHP日誌(如應用程序日誌)到stdout,他們將HTTP響應發送裏面。也許有一種方法可以將他們的stderr發送到php-fpm stderr或類似的地方。 – giorgiosironi

+0

@giorgiosironi這裏是官方的php-fpm圖像如何處理它; https://github.com/docker-library/php/blob/f795769559d9ce740e57ebd32f60f8a4569ee5b6/7.2/stretch/fpm/Dockerfile#L181-L186 – thaJeztah

+0

謝謝,但遇到https://github.com/php/php-src/pull/1076因此我放棄了stderr方法,因爲JSON日誌受到'php-fpm'引入的換行符和其他註釋的干擾或損壞。 – giorgiosironi

0

爲Docker容器的標準是記錄到stdout/stderr。但是,這對於某些PHP運行時無法正常工作,例如php-fpm,因爲日誌在lengthformat中被損壞。

因此,我將我的方法轉換爲在捲上寫入日誌,並使用sidecar container將它轉換爲stderr,然後放入Docker的日誌收集器和/或您的編排器中。

樣品docker-compose.yml部分:

cli: 
    build: . 
    volumes: 
     - logs:/srv/annotations/var/logs 
logger: 
    image: busybox:1.27.2 
    volumes: 
     - logs:/logs 
    # be careful, this will only tail alredy existing files 
    command: tail -f /logs/all.json 
    depends_on: 
     - cli