首页 > 其他分享 >Docker容器运行多个命令,有一个报错就重启容器

Docker容器运行多个命令,有一个报错就重启容器

时间:2024-07-03 17:32:32浏览次数:16  
标签:rms gunicorn 容器 -- cmd 报错 Docker data recsys

核心是entrypoint.sh脚本中的内容。

  • Dockerfile案例
FROM python:3.9.16

WORKDIR /code

ADD requirements.txt /code/requirements.txt

RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/  -r /code/requirements.txt

RUN spacy download en_core_web_trf

ADD . .

RUN mkdir -p /data/weblog &&  touch /data/weblog/rms.debug.log && mkdir -p /data/cache/aminer

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

ENV PYTHONIOENCODING=utf-8

RUN chmod +x entrypoint.sh

CMD [ "./entrypoint.sh" ]

  • entrypoint.sh 案例
#!/bin/bash

#nohup python manage_shenzhen.py rqworker --worker-ttl 600 &
#gunicorn --config gunicorn.conf recsys.wsgi:application

echo "start $TASK_NAME"

if [ "$TASK_NAME" = "api" ]; then
    # 定义要执行的命令
    commands=(
        "gunicorn --config gunicorn.conf recsys.wsgi:application &"
    )

elif [ "$TASK_NAME" = "task" ]; then
    commands=(
        "gunicorn --config gunicorn.conf recsys.wsgi:application &"
        "python run_script.py task/cron_export_user_log.py &"
        "python run_script.py task/cron_rec_train.py &"
    )

fi

# 启动命令并保存PID
pids=()
cmd_names=()

for cmd in "${commands[@]}"; do
    eval "$cmd"
    pid=$!
    pids+=($pid)
    cmd_names+=("$cmd")
done

# 监控进程的状态
while true; do
    for i in "${!pids[@]}"; do
        pid=${pids[$i]}
        cmd=${cmd_names[$i]}
        if ! kill -0 $pid > /dev/null 2>&1; then
            echo "Command '$cmd' with PID $pid has failed. Restarting container..."
            exit 1  # 退出容器,使其触发 Docker 重启策略
        fi
    done
    sleep 5
done

  • build 镜像后运行
docker build . -t rms-django:v$1


docker stop rms-recsys
docker rm rms-recsys

docker run -ti -d --name rms-recsys -p 8000:8000  \
-e TASK_NAME=$1 --restart="always" \
-e DJANGO_SETTINGS_MODULE="recsys.settings_shenzhen" \
-v /data/cache/aminer:/data/cache/aminer \
-v /home/gkx/logs/rms-recsys:/data/weblog \
-v /home/gkx/rms/appserver/recsys/nltk_data:/root/nltk_data \
rms-django:v$2

标签:rms,gunicorn,容器,--,cmd,报错,Docker,data,recsys
From: https://www.cnblogs.com/beihangxuwei/p/18282247

相关文章

  • Windows 安装docker详细步骤说明
    文章目录1.检查系统要求2.启用硬件虚拟化3.启用Hyper-V和容器功能4.下载并安装DockerDesktop5.配置DockerDesktop6.安装WSL27.验证Docker安装8.常见问题排查9.重点说明参考资源在Windows上安装Docker的详细步骤如下:1.检查系统要求确保您的Windows......
  • Docker网络
    docker网络的5种模式none在使用none模式后,Docker容器不会进行任何网络配置,没有网卡、没有IP也没有路由,因此默认无法与外界通信,需要手动添加网卡配置IP等,所以极少使用none网络特点使用参数--networknone指定默认无网络功能,无法和外部通信无法实现端口映射适用于测......
  • dockerfile构建镜像
    dockerfile构建镜像镜像是多层存储,每一层在前一层的基础上进行修改;容器也是多层存储,以镜像为基础层,在其基础上加一层作为容器运行时的存储层。要求1.docker会逐行读取dockerfile中每一行的指令,按顺序解析,实现images的自动构建2.通过dockerbuild命令构建镜像3.dockerfile......
  • 使用国内源安装新版docker(2024.7.3)
    前言最近dockerhub已经不能访问了,使用原先的方式安装docker,服务器上也总是连接不上,所以找了种可以在国内正常安装新版docker的方式适用系统:centos71.先删除本机旧的或者残留的dockersudoyumremovedocker\docker-client\docker-client......
  • 容器自动化:docker-compose
    ansible一键部署docker-compus+lnmp+lnmt项目一、docker-compose我们知道使用一个dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排,服务编排有多种技术方案。1.1、docker-compose简介docker-compose项目是docker官方的开源项目,负责实现......
  • ros2 jazzy docker环境安装
    dockerhub限制国内访问了,需要配置下,参考:https://github.com/cmliu/CF-Workers-docker.io/issues/8sudomkdir-p/etc/dockersudotee/etc/docker/daemon.json<<EOF{"registry-mirrors":["https://hub.uuuadc.top","https......
  • Spring Cloud Gateway整合Knife4j 4.4.0实现微服务聚合文档(报错解决详细版)
    以前做过的都是单服务应用的文档,就算换到了微服务里做的实际上也是单服务(每个服务模块一个单独的文档,然后手动访问不同的端口去查找不同的模块文档,例如用户是3000端口,订单是3100端口,商品是3200端口)。这样的实现实际上挺蠢的,对前端伙伴很不友好,对自己测试也不友好,因此今天要说的......
  • yum安装中关于Base.repo的报错问题
     用yum安装出现以下问题: 确认自己的DNS配置正确,而且可以用连接公网,测试如下: 查看repolist:是否为0,是的话继续下面操作yumrepolist备份原来的Base.repomv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backup 下载阿里的yum安装的Bas......
  • linux安装docker
    以下命令均以root权限执行卸载docker旧版本yumremovedockerdocker-clientdocker-client-latestdocker-commondocker-latestdocker-latest-logrotatedocker-logrotatedocker-selinuxdocker-engine-selinuxdocker-engine安装相关工具类yuminstall-yyum-utilsdev......
  • debian 12 基于清华源安装docker
    清华源docker地址:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/安装docker之前需要添加GPG公钥,主要是用来验证安装文件是否被篡改,先安装工具:curl和gnupg2,两个工具。aptinstallcurlgnupg2下面是清华源GPG地址,下载和添加。curl-fsSLhttps://mirrors.t......