如何在一个Docker中同时运行多个程序进程?
那么基本思路是在Dockerfile 的CMD 或者 ENTRYPOINT 运行一个”东西”,然后再让这个”东西”运行多个其他进程 简单说来是用Bash Shell脚本或者三方进程守护 (Monit,Skaware S6,Supervisor),其他没讲到的三方进程守护工具同理
Bash Shell脚本
入口文件运行一个Bash Shell 脚本, 然后在这个脚本内去拉起多个进程 注意最后要增加一个死循环不要让这个脚本退出,否则拉起的进程也退出了 run.sh
#!/bin/bash # start 1 start1 > /var/log/start1.log 2>&1 & # start 2 start2 > /var/log/start2.log 2>&1 & # just keep this script running while [[ true ]]; do sleep 1 done
在Dockerfile的入口中运行run.sh
ENTRYPOINT ["run.sh"]
用Bash Shell 的方式,任意发行版的linux都支持,缺点是不能拉起crash的进程,也就是只能拉起运行不能”守护” 如果不关心进程crash问题那么可以用这种方式
启动脚本范例:
#!/bin/bash # short for Host Home HH="/home/work/s2" # short for Container Home CH="/home/work/app/s2" #==============env start===============# DOCKER_ENV="" # 时区 DOCKER_ENV=" -e TZ=Asia/Shanghai $DOCKER_ENV " # 中文支持 DOCKER_ENV=" -e LC_ALL=C.UTF-8 $DOCKER_ENV " # gpu DOCKER_ENV=" -e CUDA_VISIBLE_DEVICES=${cuda.visible.devices} $DOCKER_ENV " # CAFFE_PREDICT_DEVICEID DOCKER_ENV=" -e CAFFE_PREDICT_DEVICEID=0 $DOCKER_ENV " #==============env end=================# #==============volumes start===============# DOCKER_VOLUMES="" # 配置文件挂载 DOCKER_VOLUMES=" -v $HH/data/data:$CH/data/ $DOCKER_VOLUMES " # 日志文件挂载 DOCKER_VOLUMES=" -v $HH/logs:$CH/log $DOCKER_VOLUMES " #==============volumes end=================# docker run --restart=always --runtime=nvidia -ti -d --security-opt seccomp:unconfined --cap-add SYS_PTRACE -p $${serverId}:8120 --name content-ocr-s2-${serverId} $DOCKER_ENV $DOCKER_VOLUMES $DOCKER_IMAGE
联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2017-04-20 宏的使用方式