Docker 中的 Logstash - 通过卷安装时找不到配置文件
Logstash in Docker - config file not found when mounted though a volume
编辑: 这似乎是一个 boot2docker 东西......在 ubuntu vm 运行ning docker.
我正在尝试在 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
一切正常。 IE。输入和输出
testing
{
"message" => "testing",
"@version" => "1",
"@timestamp" => "2015-04-10T00:06:33.878Z",
"host" => "d3fd885903dd"
}
如果它是 "boot2docker" 东西,请记住,它为您提供了一个基于 Tiny 内核的 Linux 主机,(/var/lib/docker
除外)。
我所做的是确保 Oracle_VM_VirtualBox_Extension_Pack 已安装,并让我的 /c/Users/<yourLogin>
在我的 boot2docker ssh 会话中自动共享。
我需要保留的内容都写在那里 (/c/Users/<yourLogin>/...
),而不是其他任何地方。
如果必须将主机目录挂载为数据卷,则应从 /c/Users/<yourLogin>/...
挂载文件夹。
另一个选项(确实会持久化)是定义一个 Data Volume Container,它将在 /var/lib/docker/volumes/conf.json
中持久化数据,并且(对于实际文件)在 /var/lib/docker/vfs/xxx
中。
这是首选的最佳实践,因为它不会 link 您的数据容器到特定主机平台(此处 '/c/Users/<yourLogin>
实际上取决于 VM 主机,在 Windows 上!不是很便携。)
编辑: 这似乎是一个 boot2docker 东西......在 ubuntu vm 运行ning docker.
我正在尝试在 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
一切正常。 IE。输入和输出
testing
{
"message" => "testing",
"@version" => "1",
"@timestamp" => "2015-04-10T00:06:33.878Z",
"host" => "d3fd885903dd"
}
如果它是 "boot2docker" 东西,请记住,它为您提供了一个基于 Tiny 内核的 Linux 主机,/var/lib/docker
除外)。
我所做的是确保 Oracle_VM_VirtualBox_Extension_Pack 已安装,并让我的 /c/Users/<yourLogin>
在我的 boot2docker ssh 会话中自动共享。
我需要保留的内容都写在那里 (/c/Users/<yourLogin>/...
),而不是其他任何地方。
如果必须将主机目录挂载为数据卷,则应从 /c/Users/<yourLogin>/...
挂载文件夹。
另一个选项(确实会持久化)是定义一个 Data Volume Container,它将在 /var/lib/docker/volumes/conf.json
中持久化数据,并且(对于实际文件)在 /var/lib/docker/vfs/xxx
中。
这是首选的最佳实践,因为它不会 link 您的数据容器到特定主机平台(此处 '/c/Users/<yourLogin>
实际上取决于 VM 主机,在 Windows 上!不是很便携。)