Docker 编写全局级别的日志记录

Docker compose global level logging

我知道对于最新的 docker 组合,我们可以在每个服务的基础上指定日志记录。例如:-

version: '2'

services:
  Sachin:
   image: hike/ubuntu:14.04
   volumes:
     - .:/testDocker
   working_dir: /testDocker
   logging:
    driver: "json-file"
    options:
     max-size: "25m"
     max-file: "2"
command: python -u test.py

我的 compose 文件中有大量容器。我可以为 docker 守护程序本身指定日志记录配置。我只是想知道是否可以在全局级别为 docker 撰写文件指定日志记录配置。像这样

version: '2'

services:
  Sachin:
   image: hike/ubuntu:14.04
   volumes:
     - .:/testDocker
   working_dir: /testDocker
logging:
 driver: "json-file"
 options:
  max-size: "25m"
  max-file: "2"
command: python -u test.py

目前无法。您可以使用 YAML 锚点将相同的结构注入每个服务,而不是重复它。

您还可以为此配置 Docker 默认值,您的所有容器都将具有该配置(您可以按容器覆盖)。

这是一个使用 YAML 锚点的解决方案示例:

version: "2"

services:

  proxy:
    build: proxy
    image: kinoulink/proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    container_name: ktv_manager_proxy
    environment:
        - HTTP_AUTH_PASSWORD=$KTV_MANAGER_PASSWORD
    logging: &logging
      driver: "awslogs"
      options:
      awslogs-region: eu-west-1
      awslogs-group: docker

  rancher:
    image: rancher/server:v1.1.3
    volumes:
      - rancher_mysql:/var/lib/mysql
      - rancher_cattle:/var/lib/cattle
    labels:
      ktv.infra.proxy.domain: 'rancher'
      ktv.infra.proxy.port: '8080'
    logging:
      <<: *logging

从 v3.4 开始(正如@tekHedd 所说),您可以使用 "extension field" 语法:

version: "3.4"

x-logging: 
      &default-logging
      driver: "awslogs"
      options:
      awslogs-region: eu-west-1
      awslogs-group: docker

services:
proxy:
    build: proxy
    image: kinoulink/proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    container_name: ktv_manager_proxy
    environment:
        - HTTP_AUTH_PASSWORD=$KTV_MANAGER_PASSWORD
    logging: *default-logging

  rancher:
    image: rancher/server:v1.1.3
    volumes:
      - rancher_mysql:/var/lib/mysql
      - rancher_cattle:/var/lib/cattle
    labels:
      ktv.infra.proxy.domain: 'rancher'
      ktv.infra.proxy.port: '8080'
    logging: *default-logging