Докер-контейнер читает журналы другого контейнера - PullRequest
1 голос
/ 20 марта 2019

Я хочу создать докер, который будет непрерывно считывать логи, stdout и stderr из другого контейнера factorio.

Я знаю, что я должен сделать это как объем, но мой лучший текущий вариант -

sudo docker logs -f factorio &> /var/log/factorio/current.logs

Я запускаю выше на экране. У меня это было как фоновая команда, но когда вы выходите из терминала, она выходит из этой команды. Экран позволяет ему работать на своем собственном терминале.

, который работает в фоновом режиме и постоянно обновляет файл. Мой контейнер newapp подключается как том к этому местоположению файла и подключается каждые 5 секунд для получения обновлений и отправки уведомлений на основе этих обновлений. Определенно есть лучший способ сделать это с томами, но я не знаю, как.

команда someapp docker ниже:

sudo docker run -d \
  -p 34197:34197/udp \
  -p 27015:27015/tcp \
  -v /opt/factorio:/factorio \
  --name factorio \
  --restart=always \
  dtandersen/factorio:0.17.16

Файл журнала /opt/factorio/factorio-current.log, но не включает stdout или stderr. Логи докера содержат эту информацию

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Использовать общий объем. Вам не нужен docker-compose для этого.

Подробнее об этом можно прочитать в официальной документации .

Но основная идея состоит в том, чтобы создать том, а затем загрузить этот том в оба контейнера. Затем сохраните нужные журналы / файлы на томе, который вы можете прочитать из другого контейнера.

Вы также можете использовать папку в своей файловой системе и смонтировать ее как том, если вы хотите получить к ней доступ и вне контейнеров.

1 голос
/ 21 марта 2019

Итак, предпочтительный способ подхода к докеру - использовать том .

Итак, как объяснялось на этой странице, ваша первая цель - создать указанный том, помните, что тома на самом деле просто своего рода именованные точки монтирования.

  1. Создайте свой объем
docker volume create factorio_logs
  1. (Необязательный шаг, но может пригодиться позже): убедитесь, что ваш том существует:
docker volume ls
  1. Свяжите производителя журналов приложений с вашим томом
docker run -d \ 
  -p 34197:34197/udp \
  -p 27015:27015/tcp \
  # adapt the line below to wherever your application is configured to store logs
  -v factorio_logs:/var/log/factorio \ 
  --name factorio \
  --restart=always \
  dtandersen/factorio:0.17.16

примечание: -v - это расширенный параметр, который может монтировать том или bind-mount в зависимости от предоставленного ему источника

  1. Создайте свой потребительский контейнер и также смонтируйте том (это просто tail -f для примера)
docker run -ti -v factorio_logs:/var/log/factorio alpine tail -f /var/log/factorio/*.log

Помните, что объем сохраняется в течение срока службы контейнера. Вам придется вручную очистить том и создать его заново, чтобы очистить логи

docker volume rm factorio_logs
docker volume create factorio_logs

Также обратите внимание, что такого рода оркестровка нескольких контейнеров, томов и т. Д. Может быть значительно упрощена с помощью docker-compose

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...