Как читать файлы и stdout из запущенного контейнера Docker



Как я могу запустить приложение на моем хост-компьютере, чтобы читать файлы и stdout из работающего контейнера docker?



по сути, я хочу сделать это:



docker start containerid   
./myapp // This app will *somehow* have access files and stdout generated by the container I just stared.


Как бы я это сделал? Чтобы быть более конкретным с тем, где я пытаюсь пойти с этим; я хочу прочитать журналы и stdout контейнера docker и обработать эти журналы где-то еще.



Я также готов создать еще один контейнер docker, который может чтение файлов и stdout из другого контейнера, но я не знаю, возможно ли это.

913   5  

5 ответов:

The stdout процесс, запущенный контейнером docker, доступен через docker logs команда (использовать -f чтобы это продолжалось вечно). Другой вариант-потоковая передача журналов непосредственно через docker remote API.

для доступа к файлам журнала (только если вы должны, рассмотреть возможность ведения журнала в stdout или другое стандартное решение, как syslogd) ваш единственный вариант в режиме реального времени является настройки громкости (как Маркус Хьюз предлагает) , поэтому журналы хранятся вне контейнера и доступны для обработки с хоста или другого контейнера.

Если вам не нужен доступ в реальном времени к журналам,вы можете экспортировать файлы (в формате tar) с docker export

чтобы просмотреть stdout, вы можете запустить контейнер docker с помощью -i. Это, конечно, не позволяет вам оставить начатый процесс и исследовать контейнер.

docker start -i containerid

в качестве альтернативы вы можете просмотреть файловую систему контейнера по адресу

/var/lib/docker/containers/containerid/root/
ни из них идеальны. Если вы хотите просмотреть журналы или любое постоянное хранилище, правильным способом будет вложение объемом С -v переключатель, когда вы используйте docker run. Это означает, что вы можете проверить файлы журналов либо на хосте, либо прикрепить их к другому контейнеру и проверить их там.

вы можете просмотреть файловую систему контейнера по адресу

/var/lib/docker/devicemapper/mnt/$CONTAINER_ID/rootfs/

а можно просто

tail -f mylogfile.log

совместное использование файлов между контейнером docker и хост-системой или между отдельными контейнерами лучше всего выполнять с помощью Тома.

наличие вашего приложения, работающего в другом контейнере, вероятно, является лучшим решением, поскольку оно гарантирует, что все ваше приложение может быть хорошо изолировано и легко развернуто. То, что вы пытаетесь сделать, звучит очень близко к настройке, описанной в это отличный пост в блоге взгляни!

немного поздно, но это то, что я делаю с journald. Он довольно мощный.

вы должны быть запущены ваши контейнеры docker на ОС с systemd-journald.

docker run -d --log-driver=journald myapp

это все трубы в journald хозяина, который заботится о вещи, как обрезка журнала, формат хранения и т. д., и дает вам некоторые интересные варианты для просмотра:

journalctl CONTAINER_NAME=myapp -f

, который будет кормить его на консоль, как это зарегистрирован,

journalctl CONTAINER_NAME=myapp > output.log

который дает вам всю партию в файле, чтобы забрать, или

journalctl CONTAINER_NAME=myapp --since=17:45

плюс вы все еще можете видеть журналы через docker logs .... если это ваши предпочтения.

не больше > my.log или -v "/apps/myapp/logs:/logs" etc

Comments

    Ничего не найдено.