当前位置: 首页 > 面试题库 >

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

娄丁雨
2023-03-14
问题内容

编辑: 这似乎是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 => html" target="_blank">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)。

我要做的是确保已安装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>实际上取决于Windows 上的 _VM_主机!不是非常可移植。”)



 类似资料:
  • 问题内容: 我最近创建了一个在Windows上的boot2docker上运行的mongodb docker实例。 不幸的是,在尝试kitematic的过程中,我意外地从mongo容器中删除了该卷,并且无法再访问我的数据。 mongo实例似乎创建了一个新卷,而旧卷现在仍悬空(孤立)并且未安装在任何容器中。 有什么办法可以恢复吗? 问题答案: 感谢您的答复,它使我处于正确的轨道,我设法使用以下命令启动

  • 问题内容: 我正在运行一个Jenkins集群,其中在Master和Slave中,它们都作为Docker容器运行。 主机是在MacOS上运行的最新的boot2docker VM。 为了使Jenkins能够使用Docker执行部署,我将docker.sock和docker客户端从主机安装到Jenkins容器,如下所示: 在将卷装载到Jenkins容器中运行的Docker容器时,我遇到了问题。例如,如果

  • 我试图将我的源文件挂载到位于/var/dynamo的docker目录中。我希望能够在本地运行Docker,并在工作时使用我的本地文件。 使用run命令: Docker版本为1.9.1

  • 问题内容: 示例(为简便起见,省略了许多选项): 这是错误的,因为没有名称名称的卷,这意味着该卷名称必须是文件的完整路径(即,您不能在该卷名称后附加路径)? 尝试设置只会返回错误。 有没有办法将单个文件安装到容器中? 问题答案: 您不能在命名卷中装入文件或子目录,源是命名卷或主机路径。NFS本身,以及您将在Linux中挂载的大多数文件系统,都要求您挂载整个文件系统,而不是单个文件,当下降到inod

  • 此问题询问有关在容器中列出卷的问题。 但我想知道的是,在不创建容器的情况下,如何找到配置到映像本身中的卷? 这个想法是,在允许容器从该映像运行之前,我想知道映像对映射到主机文件系统的卷可能做什么。 官方的映像就是一个很好的例子。当您启动此映像的容器时,它会自动在处创建一个卷。有没有办法在启动容器之前弄清楚?

  • 我使用了dockerhub的Jenkins docker图像(https://github.com/jenkinsci/docker) docker build命令已成功执行,容器也已成功启动。 Docker build命令: Docker容器命令: 然后我通过docker run-it myjenkins bash登录到容器。我找不到像config这样的jenkins配置文件。xml,詹金斯。x