【问题标题】:FileBeat Not Starting Inside Docker ContainerFileBeat 未在 Docker 容器内启动
【发布时间】:2018-10-08 20:31:04
【问题描述】:

我们创建了一个 DockerFile 来与 FileBeat 一起运行应用程序。 Docker 映像正在成功构建,当我启动容器时,我的应用程序运行良好。但是,当容器启动时 FileBeat 没有启动。

我们必须使用 docker exec 手动启动 FileBeat 服务。

下面是我的 Docker 文件。

FROM microsoft/aspnetcore:2.0.3
COPY pub/ /app/
WORKDIR /app

WORKDIR /usr/local/filebeat

RUN curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-amd64.deb
RUN dpkg -i filebeat-6.2.4-amd64.deb

CMD service filebeat start

WORKDIR /app

ENTRYPOINT ["dotnet", "Application.dll"]

【问题讨论】:

    标签: docker elasticsearch .net-core dockerfile filebeat


    【解决方案1】:

    CMD 和入口点是 Docker 映像在运行时将执行的两个组件。您似乎正在尝试使用 CMD 在启动应用程序之前启动服务。这不是它的作用,我鼓励你在这里阅读:https://docs.docker.com/engine/reference/builder/#cmd。相反,您想要的是查看在同一个容器中运行多个服务的方法。

    这里总结了在单个 Docker 容器中启动多个服务的方法:https://docs.docker.com/config/containers/multi-service_container/

    通常最好的办法是为每个容器运行一个进程,但有时这并不可行,因此要么使用 shell 脚本来启动这两个进程,要么使用更重量级的东西(如 supervisord)。

    使用创建入口点的脚本(从 Docker 文档页面内联)的简单方法:

    #!/bin/bash
    
    # Start the first process
    ./my_first_process -D
    status=$?
    if [ $status -ne 0 ]; then
      echo "Failed to start my_first_process: $status"
      exit $status
    fi
    
    # Start the second process
    ./my_second_process -D
    status=$?
    if [ $status -ne 0 ]; then
      echo "Failed to start my_second_process: $status"
      exit $status
    fi
    

    【讨论】:

      猜你喜欢
      • 2015-07-09
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多