Logstash в Docker - файл конфигурации не найден при подключении через том

РЕДАКТИРОВАТЬ: Это похоже на boot2docker... отлично работает в Ubuntu vm с работающим докером.

Я пытаюсь запустить logstash в контейнере Docker, но когда я монтирую файл конфигурации как том, он, похоже, не находит его. Интересно, что если я запускаю контейнер с помощью bash, я вижу там файл конфигурации и выполняю ту же команду, что и докер, и все работает.

Файл Docker

FROM ubuntu:14.04
MAINTAINER cvallance

RUN apt-get update
RUN apt-get -yqq install openjdk-7-jre
RUN apt-get -yqq install curl
RUN mkdir /opt/logstash \
  && cd /opt/logstash \
  && curl -O https://download.elastic.co/logstash/logstash/logstash-1.4.2.tar.gz \
  && tar zxvf logstash-1.4.2.tar.gz

CMD ["/opt/logstash/logstash-1.4.2/bin/logstash", "agent", "--verbose", "-f", "/etc/logstash/sample.conf"]

Файл конфигурации, расположенный по адресу $(pwd)/config/sample.conf

input {
  stdin { }
}

output {
  stdout {
    codec => rubydebug
  }
}

Команда сборки Docker:

docker build -t cvallance/logstash .

Команда запуска Docker:

docker run -ti -v $(pwd)/config:/etc/logstash cvallance/logstash

Ошибка:

Error: No config files found:  /etc/logstash/sample.conf
Can you make sure this path is a logstash config file?

НО если я запускаю ту же команду внутри контейнера из сеанса bash, например...

docker run -ti -v $(pwd)/config:/etc/logstash cvallance/logstash bash
...
root@d3fd885903dd:/# /opt/logstash/logstash-1.4.2/bin/logstash agent --verbose -f /etc/logstash/sample.conf

Все работает так, как ожидалось. т.е. ввод и вывод

testing
{
       "message" => "testing",
      "@version" => "1",
    "@timestamp" => "2015-04-10T00:06:33.878Z",
          "host" => "d3fd885903dd"
}

person Charlino    schedule 10.04.2015    source источник
comment
примечание: есть официальный образ logstash библиотеки докеров registry.hub.docker.com/ u/библиотека/logstash   -  person booyaa    schedule 10.04.2015


Ответы (1)


Если это «boot2docker», помните, что он предлагает вам хост Linux на основе ядра Tiny, без сохранения (кроме /var/lib/docker).

Что я делаю, так это проверяю, установлен ли Oracle_VM_VirtualBox_Extension_Pack, и автоматически делюсь моим /c/Users/<yourLogin> в моем boot2docker. ssh.
Все, что мне нужно сохранить, записано там (/c/Users/<yourLogin>/...), а не где-либо еще.
Если вам нужно смонтировать хост-каталог как том данных, вы должны смонтировать папку из /c/Users/<yourLogin>/....

Другой вариант (который сохраняется) — определить Контейнер тома данных, который будет сохранять данные в /var/lib/docker/volumes/conf.json и (для реальных файлов) в /var/lib/docker/vfs/xxx.
Это предпочтительнее, так как он не связывает ваш контейнер данных с конкретным хост-платформа (здесь '/c/Users/<yourLogin> на самом деле зависит от хоста VM в Windows! Не очень переносимый.)

person VonC    schedule 10.04.2015