Docker中的Logstash - 通过卷安装时找不到配置文件

时间:2015-04-10 00:15:18

标签: bash ubuntu docker logstash boot2docker

编辑:它似乎是一个boot2docker的东西......在运行docker的ubuntu vm中工作正常。

我试图在Docker容器中启动logstash但是当我将配置文件作为卷挂载时,它似乎找不到它。有趣的是,如果我用bash启动容器,我可以在那里看到配置文件并运行与docker相同的命令,它可以工作。

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"
}

1 个答案:

答案 0 :(得分:2)

如果是" boot2docker"事情,请记住,它是基于Tiny核心without any persistence为您提供的Linux主机(/var/lib/docker除外)。

我所做的是确保安装了Oracle_VM_VirtualBox_Extension_Pack,并在我的boot2docker ssh会话中自动共享/c/Users/<yourLogin>
无论我需要保留什么都写在那里(/c/Users/<yourLogin>/...),而不是其他任何地方 如果必须将主机目录作为数据卷安装,则应从/c/Users/<yourLogin>/...安装文件夹。

另一个选项(确实存在)是定义Data Volume Container,它会在/var/lib/docker/volumes/conf.json中保留数据,并在/var/lib/docker/vfs/xxx中保存(对于实际文件)。
这是首选的最佳做法,因为它不会将您的数据容器链接到特定的主机平台(此处&#39; /c/Users/<yourLogin>实际上取决于Windows上的 VM 主机!不太便携。)