Docker撰写全局级别日志记录

时间:2016-07-25 12:07:20

标签: docker docker-compose dockerfile

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

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 compose文件的全局级别指定日志记录配置。像这样的东西

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

2 个答案:

答案 0 :(得分:11)

您也可以为此配置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所说),你可以使用&#34;扩展字段&#34;语法:

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

答案 1 :(得分:2)

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