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

标签 bash ubuntu docker logstash boot2docker

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

我正在尝试在 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 session 中在容器内运行相同的命令...

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

一切都按预期进行。 IE。输入和输出

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

最佳答案

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

我所做的是确保 Oracle_VM_VirtualBox_Extension_Pack已安装,并获取我的 /c/Users/<yourLogin>自动在我的 boot2docker ssh session 中共享。
我需要保留的内容都写在那里( /c/Users/<yourLogin>/... ),而不是其他任何地方。
如果必须将主机目录挂载为数据卷,则应挂载 /c/Users/<yourLogin>/... 中的文件夹。 。

另一个选项(确实持续存在)是定义 Data Volume Container ,这会将数据保留在 /var/lib/docker/volumes/conf.json 中,以及(对于实际文件)/var/lib/docker/vfs/xxx .
这是首选的最佳实践,因为它不会将您的数据容器链接到特定的主机平台(此处“/c/Users/<yourLogin> 实际上取决于 Windows 上的VM”主机!不太可移植。)

关于bash - Docker 中的 Logstash - 通过卷安装时找不到配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29551239/

相关文章:

ubuntu - 无法使用 Travis-CI 运行可执行文件 - 不确定我做错了什么

Bash:开始日期小于等于结束日期

linux - 用换行符替换空格,特殊字符包裹的空格除外

json - 将变量传递给 aws cli 内联 json

Docker、Tomee、日志记录、标准输出、AWS

docker - Kubernetes中的容器垃圾收集

Docker : Difference in PID values and visible processes 中的 Java 9 ProcessHandle API

bash 脚本启动新的 shell 并继续运行命令

ubuntu - 为什么 ssh 连接到 gitlab 不起作用(而 http 推送和克隆工作正常)?

azure - 将SSD数据盘添加到Azure经典VM并将PSQL数据库文件移动到其中