diff --git a/drivers/docker/driver.go b/drivers/docker/driver.go index 88c4031fc9e8..2f93aed9c6e3 100644 --- a/drivers/docker/driver.go +++ b/drivers/docker/driver.go @@ -740,6 +740,15 @@ func (d *Driver) createContainerConfig(task *drivers.TaskConfig, driverConfig *T Config: driverConfig.Logging.Config, } + if hostConfig.LogConfig.Type == "" && hostConfig.LogConfig.Config == nil { + logger.Trace("no docker log driver provided, defaulting to json-file") + hostConfig.LogConfig.Type = "json-file" + hostConfig.LogConfig.Config = map[string]string{ + "max-file": "2", + "max-size": "2m", + } + } + logger.Debug("configured resources", "memory", hostConfig.Memory, "cpu_shares", hostConfig.CPUShares, "cpu_quota", hostConfig.CPUQuota, "cpu_period", hostConfig.CPUPeriod) diff --git a/drivers/docker/driver_test.go b/drivers/docker/driver_test.go index 445950d670ad..61e7a2b4c3bc 100644 --- a/drivers/docker/driver_test.go +++ b/drivers/docker/driver_test.go @@ -1014,17 +1014,23 @@ func TestDockerDriver_CreateContainerConfig_Logging(t *testing.T) { cases := []struct { name string loggingConfig DockerLogging - expectedDriver string + expectedConfig DockerLogging }{ { "simple type", DockerLogging{Type: "fluentd"}, - "fluentd", + DockerLogging{ + Type: "fluentd", + Config: map[string]string{}, + }, }, { "simple driver", DockerLogging{Driver: "fluentd"}, - "fluentd", + DockerLogging{ + Type: "fluentd", + Config: map[string]string{}, + }, }, { "type takes precedence", @@ -1032,7 +1038,31 @@ func TestDockerDriver_CreateContainerConfig_Logging(t *testing.T) { Type: "json-file", Driver: "fluentd", }, - "json-file", + DockerLogging{ + Type: "json-file", + Config: map[string]string{}, + }, + }, + { + "user config takes precedence, even if no type provided", + DockerLogging{ + Type: "", + Config: map[string]string{"max-file": "3", "max-size": "10m"}, + }, + DockerLogging{ + Type: "", + Config: map[string]string{"max-file": "3", "max-size": "10m"}, + }, + }, + { + "defaults to json-file w/ log rotation", + DockerLogging{ + Type: "", + }, + DockerLogging{ + Type: "json-file", + Config: map[string]string{"max-file": "2", "max-size": "2m"}, + }, }, } @@ -1049,7 +1079,9 @@ func TestDockerDriver_CreateContainerConfig_Logging(t *testing.T) { cc, err := driver.createContainerConfig(task, cfg, "org/repo:0.1") require.NoError(t, err) - require.Equal(t, c.expectedDriver, cc.HostConfig.LogConfig.Type) + require.Equal(t, c.expectedConfig.Type, cc.HostConfig.LogConfig.Type) + require.Equal(t, c.expectedConfig.Config["max-file"], cc.HostConfig.LogConfig.Config["max-file"]) + require.Equal(t, c.expectedConfig.Config["max-size"], cc.HostConfig.LogConfig.Config["max-size"]) }) } } diff --git a/website/source/docs/drivers/docker.html.md b/website/source/docs/drivers/docker.html.md index f0e34ee23e30..0ec301f87971 100644 --- a/website/source/docs/drivers/docker.html.md +++ b/website/source/docs/drivers/docker.html.md @@ -166,8 +166,8 @@ The `docker` driver supports the following configuration in the job spec. Only } ``` -* `logging` - (Optional) A key-value map of Docker logging options. The default - value is `syslog`. +* `logging` - (Optional) A key-value map of Docker logging options. + Defaults to `json-file` with log rotation (`max-file=2` and `max-size=2m`). ```hcl config {