Docker контейнер сохраняет журналы в каталоге хоста - PullRequest
0 голосов
/ 26 января 2019

У меня есть вопрос, похожий на этот . При запуске моего файла docker-compose.yml я автоматически создаю образ докера и, как указано в моем dockerfile, я запускаю определенные приложения. Эти приложения создают некоторые журналы, но эти журналы записываются внутри контейнера Docker, в папке /home/logs/.

Как я могу указать, что эти журналы записываются вне контейнера, на мой /path/on/host адрес? Просто потому, что если контейнер вышел из строя, мне нужно посмотреть логи и не потерять их!

Это мой docker-compose.yml:

version: '3'
services:
  myapp:
    build: .
    image: myapp
    ports:
      - "9001:9001"

а вот мой dockerfile:

FROM java:latest
COPY myapp-1.0.jar /home
CMD java -jar /home/myapp-1.0.jar

И я просто запускаю его на рабочей машине с docker-compose up -d.

(Кстати, я новичок в докерах. Все ли мои шаги верны? Я что-то пропустил?

Ответы [ 2 ]

0 голосов
/ 28 января 2019
  • Да, вы можете смонтировать том из хоста в контейнер, как указано в ответе выше, используя bind mount

  • В производстве я настоятельно рекомендую отправлять журналы всех контейнеров в какое-то центральное место, чтобы даже если весь хост докера вышел из строя, у вас все еще был доступ к журналам и, возможно, он мог легко анализировать, фильтровать, устанавливать наблюдатели на регистрировать ошибки и создавать панель инструментов, например ELK

https://docs.docker.com/config/containers/logging/configure/

Чтобы это работало, вам нужно настроить приложение на отправку журналов в stdout, а затем настроить демон docker для отправки журналов в одну из ваших конечных точек, например logstash , затем вы можете настроить logstash выполнить некоторую предварительную обработку (при необходимости), а затем передать ее на ваш экземпляр asticsearch .

Если пойти еще дальше, вы можете рассмотреть систему управления контейнерами, такую ​​как kubernetes с центральным ведением журнала в ELK и счетчиком до promethous .

0 голосов
/ 26 января 2019

Все, что вам нужно, это том докера, чтобы сохранить файлы журнала. Поэтому в том же каталоге, что и ваш docker-compose.yml, создайте каталог logs, а затем определите монтирование тома. При определении монтирования помните, что синтаксис <host_machine_directy>:<container_directory>.

Попробуйте следующий том и дайте мне знать, что вы получите обратно.

version: '3'
services:
  myapp:
    build: .
    image: myapp
    ports:
      - "9001:9001"
    volumes:
      - ./logs:/home/logs

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

...