Merge pull request #1388 from vdemeester/1303-log-driver-support

Add support for log-driver as a docker-compose.yml option
This commit is contained in:
Daniel Nephin 2015-05-07 12:00:42 -04:00
commit 0f2f9db6d8
5 changed files with 41 additions and 1 deletions

View File

@ -24,6 +24,7 @@ DOCKER_CONFIG_KEYS = [
'links',
'mem_limit',
'net',
'log_driver',
'pid',
'ports',
'privileged',

View File

@ -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:

View File

@ -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
@ -26,6 +26,7 @@ DOCKER_START_KEYS = [
'extra_hosts',
'read_only',
'net',
'log_driver',
'pid',
'privileged',
'restart',
@ -430,6 +431,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)
@ -457,6 +459,7 @@ class Service(object):
restart_policy=restart,
cap_add=cap_add,
cap_drop=cap_drop,
log_config=log_config,
extra_hosts=extra_hosts,
read_only=read_only,
pid_mode=pid

View File

@ -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.

View File

@ -656,3 +656,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'])