Я только начинаю работать с Docker и Richt и пытаюсь выяснить, как настроить мою первую докеризированную среду Apache 2 / PHP. До сих пор я использовал полноценные виртуальные машины Linux, где я использовал log-файлы, записываемые в / var / log / apache2, а затем использовал «logrotate» для перехода на новый файл каждый день.
Файлы журнала в основном использовались для немедленного обнаружения ошибок (т. Е. Войдите на сервер и используйте меньше для открытия текущих файлов access.log и error.log) и для fail2ban.
Если я прав, это невозможно в среде Docker - в основном потому, что вы обычно не можете войти в контейнеры, чтобы посмотреть журналы. Также логи будут потеряны, если контейнер будет удален.
Итак: Каков наиболее распространенный метод для работы с / emulate / replace access.log / error.log в этой ситуации? Каковы общие решения для среды производства и разработки?
Мои идеи до сих пор включают использование общего ресурса NFS (медленный и может привести к конфликтам имен файлов, если не соблюдать осторожность), и logstash (не уверен, стоит ли это усилий и возможно ли это для небольших сайтов или даже для сред разработки?), Но я уверен, что умные люди придумали лучшие решения?
Не уверен, что это имеет значение, но в настоящее время я основываю свой образ Docker на php: 5.6-apache .
источник
docker attach <container name>
это хороший способ увидеть стандартный вывод из вашего контейнера. Но, пожалуйста, имейте в виду, что если вы выполните ctrl + d или ctrl + c, это прекратит (sigkill) вашу текущую задачу. Таким образом, вы должны отсоединить его должным образом с помощью клавиши Escapectrl+p+q
. Если вы просто хотите вставить оболочку в свой контейнер, я предпочитаю использоватьexec
команду выше.Как насчет записи доступа и журнала ошибок в stderr и stdout?
https://mail-archives.apache.org/mod_mbox/httpd-users/201508.mbox/%3CCABx2=D-wdd8FYLkHMqiNOKmOaNYb-tAOB-AsSEf2p=ctd6sMdg@mail.gmail.com%3E
https://gist.github.com/afolarin/a2ac14231d9079920864
Централизованное ведение журнала с помощью ELK позволило бы проводить более активный мониторинг. Но ты уже думал об этом сам.
источник
До сих пор я обнаружил, что « журналы докера » упоминались несколько раз.
Я абсолютный новичок в Docker, так что это может помочь решить мою проблему - но до сих пор я не до конца понял концепцию этой команды.
Docker, похоже, сохраняет весь вывод stdout в JSON-файлах в / var / lib / docker / container / и дает мне возможность обработать их с помощью команды logs.
Пока я не уверен, как на самом деле использовать вывод.
источник
Возможно, эта функция не существовала, когда задавался вопрос, но с помощью аргумента run -v вы можете смонтировать каталог на хосте в каталог в контейнере.
Таким образом, файлы журнала (или другие файлы) сохранятся при удалении контейнера, и вы сможете получить доступ к файлам, как если бы apache был установлен на хосте, а не в контейнере.
Кроме того, вы можете как-то отправить измененные файлы журнала в центральное место. Стек Kibana использует filebeat для достижения этой цели, но должна быть возможность запуска filebeat независимо, если вы не заботитесь об остальной части стека.
источник
выбранное мной изображение докера просто связало все файлы * .log с / dev / stdout и / dev / stderr, поэтому я не мог их прочитать.
после удаления файлов и перезапуска apache я могу получить логи из / var / log / в докере.
источник
В конфигурационном файле apache вы можете добавить:
CustomLog / dev / stdout
ErrorLog / dev / stderr
и для просмотра логов используйте команду ниже:
docker logs container_id
источник