From f626fc5ce8f25f82b47d503c781855d9481e2b19 Mon Sep 17 00:00:00 2001 From: Vincent Demeester Date: Wed, 6 May 2015 13:18:58 +0200 Subject: [PATCH] Add support for log-driver in docker-compose.yml Closes #1303 Signed-off-by: Vincent Demeester --- compose/config.py | 1 + compose/container.py | 4 ++++ compose/service.py | 5 ++++- docs/yml.md | 14 ++++++++++++++ tests/integration/service_test.py | 18 ++++++++++++++++++ 5 files changed, 41 insertions(+), 1 deletion(-) diff --git a/compose/config.py b/compose/config.py index d54215dd2..5f9ed22b3 100644 --- a/compose/config.py +++ b/compose/config.py @@ -23,6 +23,7 @@ DOCKER_CONFIG_KEYS = [ 'links', 'mem_limit', 'net', + 'log_driver', 'pid', 'ports', 'privileged', diff --git a/compose/container.py b/compose/container.py index 9439a7087..fc3370d9e 100644 --- a/compose/container.py +++ b/compose/container.py @@ -83,6 +83,10 @@ class Container(object): def labels(self): return self.get('Config.Labels') or {} + @property + def log_config(self): + return self.get('HostConfig.LogConfig') or None + @property def human_readable_state(self): if self.is_running: diff --git a/compose/service.py b/compose/service.py index c66344833..ed87bc7ed 100644 --- a/compose/service.py +++ b/compose/service.py @@ -8,7 +8,7 @@ import sys import six from docker.errors import APIError -from docker.utils import create_host_config +from docker.utils import create_host_config, LogConfig from .config import DOCKER_CONFIG_KEYS from .container import Container, get_container_name @@ -25,6 +25,7 @@ DOCKER_START_KEYS = [ 'env_file', 'extra_hosts', 'net', + 'log_driver', 'pid', 'privileged', 'restart', @@ -429,6 +430,7 @@ class Service(object): privileged = options.get('privileged', False) cap_add = options.get('cap_add', None) cap_drop = options.get('cap_drop', None) + log_config = LogConfig(type=options.get('log_driver', 'json-file')) pid = options.get('pid', None) dns = options.get('dns', None) @@ -455,6 +457,7 @@ class Service(object): restart_policy=restart, cap_add=cap_add, cap_drop=cap_drop, + log_config=log_config, extra_hosts=extra_hosts, pid_mode=pid ) diff --git a/docs/yml.md b/docs/yml.md index d7196b40e..40b6c6053 100644 --- a/docs/yml.md +++ b/docs/yml.md @@ -271,6 +271,20 @@ labels: - "com.example.label-with-empty-value" ``` +### log driver + +Specify a logging driver for the service's containers, as with the ``--log-driver`` option for docker run ([documented here](http://docs.docker.com/reference/run/#logging-drivers-log-driver)). + +Allowed values are currently ``json-file``, ``syslog`` and ``none``. The list will change over time as more drivers are added to the Docker engine. + +The default value is json-file. + +``` +log_driver: "json-file" +log_driver: "syslog" +log_driver: "none" +``` + ### net Networking mode. Use the same values as the docker client `--net` parameter. diff --git a/tests/integration/service_test.py b/tests/integration/service_test.py index f7190df64..d25408bc5 100644 --- a/tests/integration/service_test.py +++ b/tests/integration/service_test.py @@ -649,3 +649,21 @@ class ServiceTest(DockerClientTestCase): labels = create_and_start_container(service).labels.items() for name in labels_list: self.assertIn((name, ''), labels) + + def test_log_drive_invalid(self): + service = self.create_service('web', log_driver='xxx') + self.assertRaises(ValueError, lambda: create_and_start_container(service)) + + def test_log_drive_empty_default_jsonfile(self): + service = self.create_service('web') + log_config = create_and_start_container(service).log_config + + self.assertEqual('json-file', log_config['Type']) + self.assertFalse(log_config['Config']) + + def test_log_drive_none(self): + service = self.create_service('web', log_driver='none') + log_config = create_and_start_container(service).log_config + + self.assertEqual('none', log_config['Type']) + self.assertFalse(log_config['Config'])