diff --git a/contrib/completion/bash/docker b/contrib/completion/bash/docker index 8fb31c2288b8b..ba74289a79c78 100644 --- a/contrib/completion/bash/docker +++ b/contrib/completion/bash/docker @@ -748,6 +748,7 @@ _docker_daemon() { --ip-masq=false --iptables=false --ipv6 + --raw-logs --selinux-enabled --userland-proxy=false " diff --git a/contrib/completion/zsh/_docker b/contrib/completion/zsh/_docker index 25be25e02d14f..b77435a1560ff 100644 --- a/contrib/completion/zsh/_docker +++ b/contrib/completion/zsh/_docker @@ -666,6 +666,7 @@ __docker_subcommand() { "($help)*--log-opt=[Log driver specific options]:log driver options:__docker_log_options" \ "($help)--mtu=[Set the containers network MTU]:mtu:(0 576 1420 1500 9000)" \ "($help -p --pidfile)"{-p=,--pidfile=}"[Path to use for daemon PID file]:PID file:_files" \ + "($help)--raw-logs[Full timestamps without ANSI coloring]" \ "($help)*--registry-mirror=[Preferred Docker registry mirror]:registry mirror: " \ "($help -s --storage-driver)"{-s=,--storage-driver=}"[Storage driver to use]:driver:(aufs devicemapper btrfs zfs overlay)" \ "($help)--selinux-enabled[Enable selinux support]" \ diff --git a/contrib/init/upstart/docker.conf b/contrib/init/upstart/docker.conf index b40340847e3c3..72fa69b73bd0e 100644 --- a/contrib/init/upstart/docker.conf +++ b/contrib/init/upstart/docker.conf @@ -39,7 +39,7 @@ script if [ -f /etc/default/$UPSTART_JOB ]; then . /etc/default/$UPSTART_JOB fi - exec "$DOCKER" daemon $DOCKER_OPTS + exec "$DOCKER" daemon $DOCKER_OPTS --raw-logs end script # Don't emit "started" event until docker.sock is ready. diff --git a/daemon/config.go b/daemon/config.go index 932d535e5723a..e0b07b056d565 100644 --- a/daemon/config.go +++ b/daemon/config.go @@ -57,6 +57,7 @@ type CommonConfig struct { Labels []string `json:"labels,omitempty"` Mtu int `json:"mtu,omitempty"` Pidfile string `json:"pidfile,omitempty"` + RawLogs bool `json:"raw-logs,omitempty"` Root string `json:"graph,omitempty"` TrustKeyPath string `json:"-"` @@ -104,6 +105,7 @@ func (config *Config) InstallCommonFlags(cmd *flag.FlagSet, usageFn func(string) cmd.BoolVar(&config.AutoRestart, []string{"#r", "#-restart"}, true, usageFn("--restart on the daemon has been deprecated in favor of --restart policies on docker run")) cmd.StringVar(&config.GraphDriver, []string{"s", "-storage-driver"}, "", usageFn("Storage driver to use")) cmd.IntVar(&config.Mtu, []string{"#mtu", "-mtu"}, 0, usageFn("Set the containers network MTU")) + cmd.BoolVar(&config.RawLogs, []string{"-raw-logs"}, false, usageFn("Full timestamps without ANSI coloring")) // FIXME: why the inconsistency between "hosts" and "sockets"? cmd.Var(opts.NewListOptsRef(&config.DNS, opts.ValidateIPAddress), []string{"#dns", "-dns"}, usageFn("DNS server to use")) cmd.Var(opts.NewNamedListOptsRef("dns-opts", &config.DNSOptions, nil), []string{"-dns-opt"}, usageFn("DNS options to use")) diff --git a/docker/daemon.go b/docker/daemon.go index 0f8541921544b..793fd56cc6043 100644 --- a/docker/daemon.go +++ b/docker/daemon.go @@ -168,7 +168,10 @@ func (cli *DaemonCli) CmdDaemon(args ...string) error { logrus.Warn("Running experimental build") } - logrus.SetFormatter(&logrus.TextFormatter{TimestampFormat: jsonlog.RFC3339NanoFixed}) + logrus.SetFormatter(&logrus.TextFormatter{ + TimestampFormat: jsonlog.RFC3339NanoFixed, + DisableColors: cli.Config.RawLogs, + }) if err := setDefaultUmask(); err != nil { logrus.Fatalf("Failed to set umask: %v", err) diff --git a/docs/reference/commandline/daemon.md b/docs/reference/commandline/daemon.md index df823995cd204..198629541470a 100644 --- a/docs/reference/commandline/daemon.md +++ b/docs/reference/commandline/daemon.md @@ -54,6 +54,7 @@ weight = -1 --mtu=0 Set the containers network MTU --disable-legacy-registry Do not contact legacy registries -p, --pidfile="/var/run/docker.pid" Path to use for daemon PID file + --raw-logs Full timestamps without ANSI coloring --registry-mirror=[] Preferred Docker registry mirror -s, --storage-driver="" Storage driver to use --selinux-enabled Enable selinux support @@ -860,19 +861,20 @@ This is a full example of the allowed configuration options in the file: "group": "", "cgroup-parent": "", "default-ulimits": {}, - "ipv6": false, - "iptables": false, - "ip-forward": false, - "ip-mask": false, - "userland-proxy": false, - "ip": "0.0.0.0", - "bridge": "", - "bip": "", - "fixed-cidr": "", - "fixed-cidr-v6": "", - "default-gateway": "", - "default-gateway-v6": "", - "icc": false + "ipv6": false, + "iptables": false, + "ip-forward": false, + "ip-mask": false, + "userland-proxy": false, + "ip": "0.0.0.0", + "bridge": "", + "bip": "", + "fixed-cidr": "", + "fixed-cidr-v6": "", + "default-gateway": "", + "default-gateway-v6": "", + "icc": false, + "raw-logs": false } ``` diff --git a/man/docker-daemon.8.md b/man/docker-daemon.8.md index 02adaeda9111d..051c9e074823b 100644 --- a/man/docker-daemon.8.md +++ b/man/docker-daemon.8.md @@ -44,6 +44,7 @@ docker-daemon - Enable daemon mode [**--log-opt**[=*map[]*]] [**--mtu**[=*0*]] [**-p**|**--pidfile**[=*/var/run/docker.pid*]] +[**--raw-logs**] [**--registry-mirror**[=*[]*]] [**-s**|**--storage-driver**[=*STORAGE-DRIVER*]] [**--selinux-enabled**] @@ -197,6 +198,11 @@ unix://[/path/to/socket] to use. **-p**, **--pidfile**="" Path to use for daemon PID file. Default is `/var/run/docker.pid` +**--raw-logs** +Output daemon logs in full timestamp format without ANSI coloring. If this flag is not set, +the daemon outputs condensed, colorized logs if a terminal is detected, or full ("raw") +output otherwise. + **--registry-mirror**=*://* Prepend a registry mirror to be used for image pulls. May be specified multiple times.