Докку - где находится каталог моего приложения
Я пытаюсь получить доступ к журналам моего Node.js
заявление, которое написано в файле mylogfile.log
внутри каталога приложения. С помощью find / -type f -name mylogfile.log
я смог увидеть этот вывод:
/var/lib/docker/aufs/diff/0303e86afdc58e13b5afcc07ea3694e0e9e6d5e5cf8530a0854a76fbe2baf574/app/mylogfile.log
/var/lib/docker/aufs/diff/a9a0dab44456acd8b43915ed686c282b778ab99df31f62076082e121274ef6e2/app/mylogfile.log
/var/lib/docker/aufs/mnt/0303e86afdc58e13b5afcc07ea3694e0e9e6d5e5cf8530a0854a76fbe2baf574/app/mylogfile.log
Что это за каталоги (если это приложение запускает предыдущее приложение, зачем оно мне вообще нужно, я не хочу заполнять им пространство жесткого диска) и какой из них является каталогом моего работающего в данный момент приложения?
Также внутри ...mnt/
а также ...diff/
там гораздо больше папок с похожими загадочными именами.
2 ответа
Обратите внимание, что файловая система контейнера Docker не предназначена для доступа пользователей с хоста. На самом деле это довольно сложно, так как Docker использует многоуровневую файловую систему копирования при записи (например, AUFS в вашем случае, но это зависит от дистрибутива; большинство дистрибутивов, кроме Ubuntu, используют Devicemapper вместо AUFS, IIRC). То, что вы видите, это слои файловой системы, каждый из которых содержит разницу с одним родительским слоем.
Если вы хотите регистрировать содержимое внутри контейнера приложения, вы должны рассмотреть одну из следующих возможностей:
Поместите ваши файлы журнала в том. Вы можете смонтировать каталог хоста как том и записать туда файлы. Вам необходимо указать монтирование при создании контейнера, используя
-v
флаг (-v <host-directory>:<dir in container>
):docker run -v /var/log/myapplication:/path/to/app/in/container myimage
Запишите свои журналы на стандартный вывод и позвольте Docker беспокоиться о журналах. Вы можете получить доступ к журналу (да, это будет только один большой файл), используя
docker logs <container-name>
Вы также найдете файл журнала в вашем каталоге времени выполнения Docker (обычно
/var/lib/docker
) в/var/lib/docker/containers/<container-id>/<container-id>-json.log
, Однако этот файл журнала не будет автоматически вращаться, поэтому он может увеличиться.Используйте внешнюю службу ведения журнала для записи данных журнала в другое место в вашей сети. Типичными кандидатами могут быть системный журнал (старая школа) или настройка чего-то вроде Logstash или Graylog.
Ответ @helmberts великолепен и дает вам все, что вам нужно, я стараюсь добавить к блюду немного соли (и что-то докку- не специфичное для докера).
Дело в том, что ваше приложение живет в восстанавливаемой и отключаемой среде. С вашим развертыванием (git push
) вы как бы настраиваете ancester, каждый раз, когда вы запускаете приложение после слов, вы создаете клон, который умирает, как только вы останавливаете контейнер (вроде).
Ты можешь сделать dokku run myapp ls /
чтобы увидеть, как это выглядит. Вы могли бы внести изменения (dokku run myapp touch /mytouched.file
) но они не сохранились (dokku run
дает тебе свежий клон!) и сразу "теряется". Если вы хотите, чтобы файлы были где-то навсегда, используйте том и смонтируйте его в свой app-контейнер (ы). Для этого есть крутой плагин (dokku-volume).
Я не могу сказать вам, как удалить старые различия.