Как в Docker отключить логирование всех контейнеров?

По-умолчанию в Docker для всех контейнеров устанавливается режим логирования json-file, т.е. весь STDOUT каждого контейнера будет писаться в файл. В целях отладки это может быть полезно, однако большой поток логов и их запись на диск может занять больше ресурсов, чем полезная нагрузка. Достаточно спорное решение, особенно для тех, кто имел опыт работы с другими системами контейнеризации, например, с Proxmox.

Чтобы отключить логирование контейнеров нужно создать, либо отредактировать файл /etc/docker/daemon.json добавив в него строки:

{
 "log-driver": "none"
}

После чего потребуется перезапуск docker и всех контейнеров:

service docker restart

Проверить и посмотреть текущие настройки журналирования можно так:

docker info | grep 'Logging Driver'

Проверить драйвер логирования для запущенного контейнера можно с помощью команды:

docker inspect -f '{{.HostConfig.LogConfig.Type}}' <CONTAINER>

Чтобы создать новый контейнер с определённым механизмом логирования нужно воспользоваться опцией —log-driver, например:

docker run --log-driver none alpine

В docker-compose версии 2 и 3 это будет выглядеть так:

 mariadb:
 image: mariadb
 logging:
   driver: none

А для старой первой версии так:

log_driver: none

Ещё одна хитрость при использовании docker-compose: можно создать глобальные шаблоны до объявления сервисов:

x-logging:
 &default-logging
 driver: none
x-logging:
 &debug-logging
 driver: json-file

А затем в сервисе ссылаться на имя шаблона:

logging: *default-logging
logging: *debug-logging

Подробнее о конфигурации файла docker-compose.yml смотрите в документации: https://docs.docker.com/compose/compose-file/

Возможность изменить драйвер логирования у запущеного контейнера не предусмотрена. Если нужно его изменить — то только пересоздание контейнера с нужными настройками.

Помимо значений none и json-file поддерживаются и другие: syslog, journald, gelf, fluentd, awslogs, splunk, etwlogs, gcplogs, logentries. А так же имеется возможность создавать создать плагин, реализующий нужную вам логику журналирования.

Подробнее о настройке логирования контейнеров смотрите в официальной документации: https://docs.docker.com/config/containers/logging/configure/