Докку - где находится каталог моего приложения

Я пытаюсь получить доступ к журналам моего 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). То, что вы видите, это слои файловой системы, каждый из которых содержит разницу с одним родительским слоем.

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

  1. Поместите ваши файлы журнала в том. Вы можете смонтировать каталог хоста как том и записать туда файлы. Вам необходимо указать монтирование при создании контейнера, используя -v флаг (-v <host-directory>:<dir in container>):

    docker run -v /var/log/myapplication:/path/to/app/in/container myimage
    
  2. Запишите свои журналы на стандартный вывод и позвольте Docker беспокоиться о журналах. Вы можете получить доступ к журналу (да, это будет только один большой файл), используя

    docker logs <container-name>
    

    Вы также найдете файл журнала в вашем каталоге времени выполнения Docker (обычно /var/lib/docker) в /var/lib/docker/containers/<container-id>/<container-id>-json.log, Однако этот файл журнала не будет автоматически вращаться, поэтому он может увеличиться.

  3. Используйте внешнюю службу ведения журнала для записи данных журнала в другое место в вашей сети. Типичными кандидатами могут быть системный журнал (старая школа) или настройка чего-то вроде Logstash или Graylog.

Ответ @helmberts великолепен и дает вам все, что вам нужно, я стараюсь добавить к блюду немного соли (и что-то докку- не специфичное для докера).

Дело в том, что ваше приложение живет в восстанавливаемой и отключаемой среде. С вашим развертыванием (git push) вы как бы настраиваете ancester, каждый раз, когда вы запускаете приложение после слов, вы создаете клон, который умирает, как только вы останавливаете контейнер (вроде).

Ты можешь сделать dokku run myapp ls / чтобы увидеть, как это выглядит. Вы могли бы внести изменения (dokku run myapp touch /mytouched.file) но они не сохранились (dokku run дает тебе свежий клон!) и сразу "теряется". Если вы хотите, чтобы файлы были где-то навсегда, используйте том и смонтируйте его в свой app-контейнер (ы). Для этого есть крутой плагин (dokku-volume).

Я не могу сказать вам, как удалить старые различия.

Другие вопросы по тегам