Thank you for reading this post, don't forget to subscribe!
Работа с логами (Logs) в Docker
СПОСОБ 1
Стандартное использование будет следующим:
СПОСОБ 2
Логи монтируются на хостевую машину, по этому легко понять где лежат логи:
СПОСОБ 3
Иногда бывает так, что приложение не умеет выводить логи. Рассмотрим наглядный пример. Запустим контейнер:
Как видно с вывода, докер не может считать логи с контейнера. Первое что приходит в голову, — это не рабочий контейнер, да? Но пробуем получить данные:
Дело в в том, что логи для Nginx лежат:
Пофиксим это дело следующим образом, в докерфайл (нужно дописать\переопределить вывод):
[codesyntax lang="php" blockstate="collapsed"]
1 2 3 4 5 6 7 8 |
FROM centos LABEL maintainer="sidmid.ru" RUN yum install -y httpd web-assets-httpd && yum clean all RUN echo "logs are sending to stdout" > /var/www/html/index.html RUN ln -s /dev/stdout /var/log/httpd/access_log && \ ln -s /dev/stderr /var/log/httpd/error_log EXPOSE 80 CMD httpd -DFOREGROUND |
[/codesyntax]
Билдим образ:
Дернем курлом:
$ curl localhost:$(docker port $(docker ps -lq) | cut -d: -f2)
logs are sending to stdout
Запустим контейнер с заданным именем и лог-драйвером, например:
Чекаем:
$ curl localhost:$(docker port $(docker ps -lq) | cut -d: -f2)
logs are sending to stdout
- none — Логи не доступны для контейнера, и логи самого докера не возвращают никакого вывода.
- json-file- Log-и отформатированы как JSON. Данный драйвер используется по умолчанию в Docker.
- syslog — Записывает логи в syslog. Демон syslog должен быть запущен на самом хосте.
- journald — Записывает логи в journald. Демон journald должен быть запущен на самом хосте.
- gelf — Записывает сообщения в Graylog (GELF) или Logstash.
- fluentd — Записывает сообщения на fluentd (forward input). Демон fluentd должен быть запущен на самом хосте.
- awslogs- Записывает сообщения в Amazon CloudWatch.
- splunk — Записывает сообщения в splunk с помощью сборщика HTTP событий (HTTP Event Collector).
- gcplogs — Записывает сообщения в Google Cloud Platform (GCP).
- logentries — Записывает сообщения в Rapid7 Logentries.
Проверим что используется по умолчанию:
Меняем на нужный:
Можно запустить контейнер:
$ docker run -d -P --name=myweb --log-opt tag=myweb_tag myhttpd:2.0