我们已经创建了一个DockerFile来与FileBeat一起运行应用程序。 Docker Image正在成功构建,当我启动容器时,我的应用程序运行正常。但是,容器启动时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"]
答案 0 :(得分:0)
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