Docker镜像运行后Nginx正常但Sensu-agent未启动,需手动启动求助
问题原因及解决方法
可能的问题点
- Sensu Agent默认不会自动读取你定义的环境变量,除非
agent.yaml中使用了变量引用且启动前完成替换 - 当前CMD的进程管理方式不可靠,若Sensu Agent启动后进入后台,bash进程退出可能导致Agent被终止
- 启动命令未明确指定Agent关键配置参数,依赖环境变量可能未生效
解决方案一:直接在启动命令中指定Agent参数
修改Dockerfile的CMD命令,明确传递backend URL和订阅参数给sensu-agent,同时用wait确保两个进程持续运行:
CMD ["/bin/bash", "-c", "nginx -g 'daemon off;' & sensu-agent start --backend-url $SENSU_BACKEND_URL --subscriptions $SENSU_SUBSCRIPTIONS && wait"]
解决方案二:使用Supervisor管理多进程
这种方式更稳定,适合容器内运行多个长期进程:
- 更新Dockerfile,安装supervisor并配置服务:
FROM ubuntu:latest RUN apt-get update && apt-get install -y \ curl jq bash nginx supervisor # Install Sensu agent from the official repository RUN curl -s https://packagecloud.io/install/repositories/sensu/stable/script.deb.sh | bash \ && apt-get update && apt-get install -y sensu-go-agent # 创建supervisor配置目录 RUN mkdir -p /etc/supervisor/conf.d COPY services.conf /etc/supervisor/conf.d/services.conf # Define environment variables for Sensu backend connection ENV SENSU_BACKEND_URL=ws://34.207.219.74:8081 ENV SENSU_SUBSCRIPTIONS=linux,system # Expose Nginx ports EXPOSE 80 CMD ["/usr/bin/supervisord"]
- 在Dockerfile同目录下创建
services.conf文件:
[supervisord] nodaemon=true [program:nginx] command=/usr/sbin/nginx -g 'daemon off;' autostart=true autorestart=true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 [program:sensu-agent] command=/usr/sbin/sensu-agent start --backend-url %(ENV_SENSU_BACKEND_URL)s --subscriptions %(ENV_SENSU_SUBSCRIPTIONS)s autostart=true autorestart=true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 environment=SENSU_BACKEND_URL=%(ENV_SENSU_BACKEND_URL)s,SENSU_SUBSCRIPTIONS=%(ENV_SENSU_SUBSCRIPTIONS)s
解决方案三:替换agent.yaml中的环境变量
如果希望通过agent.yaml配置Agent,需先替换其中的变量:
- 更新Dockerfile,安装
gettext-base(提供envsubst工具):
FROM ubuntu:latest RUN apt-get update && apt-get install -y \ curl jq bash nginx gettext-base # Install Sensu agent from the official repository RUN curl -s https://packagecloud.io/install/repositories/sensu/stable/script.deb.sh | bash \ && apt-get update && apt-get install -y sensu-go-agent # 复制模板文件 COPY agent.yaml /etc/sensu/agent.yaml.template # Define environment variables for Sensu backend connection ENV SENSU_BACKEND_URL=ws://34.207.219.74:8081 ENV SENSU_SUBSCRIPTIONS=linux,system # Expose Nginx ports EXPOSE 80 CMD ["/bin/bash", "-c", "envsubst < /etc/sensu/agent.yaml.template > /etc/sensu/agent.yaml && nginx -g 'daemon off;' & sensu-agent start && wait"]
- 修改你的
agent.yaml为模板文件,使用变量占位符:
backend-url: "${SENSU_BACKEND_URL}" subscriptions: - "${SENSU_SUBSCRIPTIONS}" # 其他Agent配置...
内容的提问来源于stack exchange,提问作者sas
相关产品推荐
相关产品推荐

