编辑: 这似乎是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
$(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" }
如果这是“ boot2docker”问题,请记住,它为您提供了基于Tiny内核的Linux主机,没有任何持久性(除外/var/lib/docker)。
/var/lib/docker
我要做的是确保已安装Oracle_VM_VirtualBox_Extension_Pack,并/c/Users/<yourLogin>在boot2docker ssh会话中自动将其共享。 我需要保留的内容都写在那里(/c/Users/<yourLogin>/...),而不是其他任何地方。 如果必须将主机目录作为数据卷挂载,则应从中挂载文件夹/c/Users/<yourLogin>/...。
/c/Users/<yourLogin>
/c/Users/<yourLogin>/...
另一个选项(确实存在)是定义一个数据卷容器,它将在/var/lib/docker/volumes/conf.json中的和(对于实际文件)中保留数据/var/lib/docker/vfs/xxx。 这是首选的最佳实践,因为它不会将数据容器链接到特定的主机平台(此处“ /c/Users/<yourLogin>实际上取决于Windows 上的 _VM_主机!不是非常可移植。”)
/var/lib/docker/volumes/conf.json
/var/lib/docker/vfs/xxx