FileBeat не запускается внутри контейнера Docker - PullRequest
0 голосов
/ 28 апреля 2018

Мы создали DockerFile для запуска приложения вместе с FileBeat. Docker Image успешно создается, и когда я запускаю контейнер, мое приложение работает нормально. Однако FileBeat не запускается при запуске контейнера.

Мы должны вручную запустить FileBeat Service с помощью docker exec.

Ниже находится мой файл Docker.

FROM microsoft/aspnetcore:2.0.3
COPY pub/ /app/
WORKDIR /app

WORKDIR /usr/local/filebeat

RUN curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-amd64.deb
RUN dpkg -i filebeat-6.2.4-amd64.deb

CMD service filebeat start

WORKDIR /app

ENTRYPOINT ["dotnet", "Application.dll"]

1 Ответ

0 голосов
/ 28 апреля 2018

CMD и точка входа - это два компонента, которые образ Docker будет делать при запуске. Похоже, вы пытаетесь использовать CMD для запуска службы до запуска вашего приложения. Это не то, что он делает, и я рекомендую вам прочитать об этом здесь: https://docs.docker.com/engine/reference/builder/#cmd. Вместо этого вам нужно взглянуть на способы запуска нескольких служб в одном контейнере.

Ниже приведено краткое описание способов запуска нескольких служб в одном контейнере Docker: https://docs.docker.com/config/containers/multi-service_container/

Часто лучшее, что можно сделать, - это запустить по одному процессу на контейнер, но иногда это неосуществимо, поэтому либо используйте сценарий оболочки для запуска обоих процессов, либо что-то более тяжелое (например, supervisord).

Простой способ использования скрипта (встроенного на той странице документации Docker), который вы делаете точкой входа:

#!/bin/bash

# Start the first process
./my_first_process -D
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start my_first_process: $status"
  exit $status
fi

# Start the second process
./my_second_process -D
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start my_second_process: $status"
  exit $status
fi
...