Apache в Докер: Як я можу “додати.лог”?


17

Я тільки починаю роботу з Docker і Richt зараз я намагаюся розібратися, як створити своє перше докерізоване середовище Apache 2 / PHP. До сих пір я використовував повноцінні віртуальні віртуальні машини Linux, де я використовував файли журналів, що записуються в / var / log / apache2, а потім використовую "logrotate", щоб переходити до нового файлу щодня.

Логістичні файли в основному використовувались для негайного виявлення помилок (тобто увійти на сервер та менше використовувати для відкриття поточних файлів access.log та error.log) та для fail2ban.

Якщо я маю рацію, це неможливо здійснити в середовищі Docker - головним чином тому, що ви зазвичай не можете увійти до контейнерів, щоб переглянути журнали. Також журнали будуть втрачені, якщо контейнер буде вилучений.

Отже: який найпоширеніший метод роботи з / емуляцією / заміною access.log / error.log у цій ситуації? Які спільні рішення як для виробничого, так і для виробничого середовища?

До цих пір мої ідеї включають використання спільного доступу до NFS (повільний і може спричинити зіткнення імен файлів, якщо не бути обережним), а також logstash (не впевнений, чи варто докладати зусиль і практично для менших сайтів чи навіть середовищ розробника?), Але я впевнений, що розумні люди придумали кращі рішення?

Не впевнений, чи має це значення, але наразі я засновую своє зображення Docker на php: 5.6-apache .

Відповіді:


13

Ви все ще можете скористатися docker exec -it <your container name> /bin/bashкомандою, щоб потрапити у свій контейнер і виконати свою звичайну роботу. Або, можливо, ви можете змінити /bin/bashсвою команду або сценарій .shсвоєї команди, щоб виконати її.

Щоб вимкнути файл із контейнера docker cp <container name:/path/to/file> </your local machine/path/>

А для своєї щоденної роботи ви можете скористатися cronцими командами. Я настійно рекомендую вам мати псевдоніми ваші часті докерські команди. Так що я можу користуватися докер щасливо за допомогою декількох клавіш.

docker logs <container name/id>Команда призначена для перегляду журналу від виконання Docker зображення. Він показує перенаправлення виводу на stdout.


Крім того, docker attach <container name>це хороший спосіб побачити stdout з вашого контейнера. Але будь ласка, будьте уважні, що якщо ви зробите ctrl + d або ctrl + c, це припинить (sigkill) ваше поточне завдання. Тому вам доведеться правильно від'єднати його за допомогою клавіші втечі ctrl+p+q. Якщо ви просто хочете скористатися вашим контейнером, я вважаю за краще використовувати execкоманду вище.
Фоні Лев

6

Як щодо запису журналу доступу та помилок до 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

RUN ln -sf / dev / stdout /var/log/nginx/access.log

RUN ln -sf / dev / stderr /var/log/nginx/error.log

Централізоване ведення журналу за допомогою ELK дозволило б забезпечити більш активний моніторинг. Але ви вже самі про це думали.


1

Поки що я виявив, що " докерські журнали " згадуються кілька разів.

Я абсолютний новичок Докера, тому це може вирішити мою проблему - але поки що я не повністю зрозумів концепцію цієї команди.

Схоже, що Docker зберігає весь вихід stdout у файлах JSON в / var / lib / docker / контейнери / і дає мені шанс отримати доступ до них за допомогою команди logs.

Поки що я не впевнений, як насправді використовувати вихід.


1

Можливо, ця функція не існувала, коли було задано питання, але за допомогою аргументу -v run можна встановити каталог на хості на каталог у контейнері.

docker run -v [host_dir]:[container_dir]

Таким чином, файли журналу (або інших) збережуться, коли контейнер буде видалений, і ви можете отримати доступ до файлів так, як якщо б апаш був встановлений на хості, а не в контейнері.

Крім того, ви можете якось перенести модифіковані файли журналів до центрального місця. Стек Kibana використовує filebeat для досягнення цього, але слід запускати filebeat самостійно, якщо ви не піклуєтесь про решту стека.


1
Три роки тому Докер прив'язував обсяги монтажу.
живіт

0
root@my_docker:~ # ls -l /var/log/apache2/
total 0
lrwxrwxrwx 1 root root 11 Jul 17 04:55 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 Jul 17 04:55 error.log -> /dev/stderr
lrwxrwxrwx 1 root root 11 Jul 17 04:55 other_vhosts_access.log -> /dev/stdout
root@my_docker:~ #

Образ докера я вибрав тільки що зв'язав усі файли * .log з / dev / stdout та / dev / stderr, тому я не міг їх прочитати.

Після видалення файлів та перезапуску apache я можу отримати журнали з / var / log / у докер.

docker-compose exec apache bash -c "tail -f /var/log/apache2/*.log"

0

У файл конфігурації apache можна додати:
CustomLog / dev / stdout
ErrorLog / dev / stderr

і щоб побачити журнали, скористайтеся командою нижче:
docker logs container_id

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.