当前位置: 首页 > web >正文

docker使用sh脚本创建容器,保持容器正常运行,异常关闭后马上重启

docker run -d --name dadeName \--memory=5120m \-p 40060:80 \-p 40061:3306 \-v "$data:$dockerData" \-v "$img:$dockerImg" \--restart=always \  # 关键参数:总是重启dade:120 \/bin/bash -c "/www/start.sh && tail -f /dev/null"

–restart=always:无论容器因何原因停止(手动停止、异常退出等),Docker 都会自动重启它。
–restart=unless-stopped:除非手动停止容器,否则 Docker 会在容器退出时自动重启。
–restart=on-failure[:max-retries]:仅在容器以非零状态码退出时重启,可指定最大重试次数(如 on-failure:5)。

第一次创建,初始化挂载目录

#!/bin/bash# 容器内目录
dockerData="/usr/local/mysql/data"
dockerImg="/www/python/static/img"
# 挂载主机目录
data="/home/dockerV/dade01_data"
img="/home/dockerV/dade01_img"# 第一次创建使用,后面的就不用了
# 创建宿主机目标目录,不存在创建
mkdir -p $data
mkdir -p $img
# 需要去容器先拷贝一份出来
cp -r /home/dockerV/mysql/* $data/
# sleep 3
# mysql数据库data目前权限,里面是dade权限,主机也要给一样的权限,不然mysql无法运行
sudo chown -R dade:dade $data# 启动容器,创建容,memory限制容器内存大小5g,dade:120是那个容器版本,:rw表示读写,:ro是只读,不写(rw,ro默认读写)
docker run -d --name dadeName --memory=5120m -p 40060:80 -p 40061:3306 -v $data:$dockerData -v $img:$dockerImg --restart=unless-stopped dade:120 /bin/bash -c "/www/start.sh && tail -f /dev/null"

-d后台运行

/www/start.sh启动执行脚本

&& tail -f /dev/null 的作用
&& tail -f /dev/null 是一个在容器中常用的技巧,用于保持主进程运行,防止容器因主命令执行完毕而退出
性能影响:tail -f /dev/null 几乎不消耗 CPU 资源,比 sleep infinity 更高效。

或者,启动容器拷贝出来

#!/bin/bash# 容器内目录
dockerData="/usr/local/mysql/data"
dockerImg="/www/python/static/img"
# 挂载主机目录
data="/home/dockerV/dade01_data"
img="/home/dockerV/dade01_img"# 第一次创建使用,后面的就不用了
# 创建宿主机目标目录,不存在创建
mkdir -p $data
mkdir -p $img
# 如果提前有拷贝出来
# cp -r /home/dockerV/mysql/* $data/
# 启动容器复制
docker run -d --name dadeNameCp dade:120 /bin/bash -c "tail -f /dev/null"
sleep 2
# 需要去容器先拷贝一份出来,不知道为什么一直复制带了data目录一起复制过来
# docker cp "dadeNameCp:$dockerData/" "$data/"# 或者使用方法二,在里面压缩,在复制就不会了
docker exec dadeNameCp tar -C "$dockerData" -c . | tar -C "$data" -x# mysql数据库data目前权限,里面是dade权限,主机也要给一样的权限,不然mysql无法运行
sudo chown -R dade:dade $data
# 停止并删除容器
docker stop dadeNameCp
docker rm dadeNameCp# 启动容器,创建容,memory限制容器内存大小5g,dade:120是那个容器版本,:rw表示读写,:ro是只读,不写(rw,ro默认读写)
docker run -d --name dadeName --memory=5120m -p 40060:80 -p 40061:3306 -v $data:$dockerData -v $img:$dockerImg --restart=unless-stopped dade:120 /bin/bash -c "/www/start.sh && tail -f /dev/null"
http://www.xdnf.cn/news/10714.html

相关文章:

  • 【Unity】云渲染
  • 第1章:走进Golang
  • 《类和对象--继承》
  • JavaScript中的常量值与引用值:从基础到实践
  • Vue-Leaflet地图组件开发(二)地图核心功能实现
  • ck-editor5的研究 (6):进一步优化页面刷新时,保存提示的逻辑
  • 5.29 自学测试 Linux基础 Day4
  • webfuture:提示“Strict-Transport-Security头未设置”漏洞的解决方法
  • 深度学习pycharm debug
  • Cesium 自带的标注碰撞检测实现标注避让
  • esp32关于PWM最清晰的解释
  • 渊龙靶场-sql注入(数字型注入)
  • 快乐大冒险:解锁身体里的 “快乐密码”
  • 力扣刷题Day 68:搜索插入位置(35)
  • 如何在 Windows 11 24H2 的任务栏时钟中显示秒数
  • js的时间循环的讲解
  • 100V离线语音通断器
  • java笔记08
  • 15-2021剑侠情缘2-各种修复完善+虚拟机单机端+外网服务端整理+文本教程+视频教程
  • Linux服务器安装GUI界面工具
  • 【数据集】NCAR CESM Global Bias-Corrected CMIP5 Output to Support WRF/MPAS Research
  • Redis部署架构详解:原理、场景与最佳实践
  • Java函数式编程(中)
  • 第十二节:第五部分:集合框架:Set集合的特点、底层原理、哈希表、去重复原理
  • 《QDebug 2025年5月》
  • 基于大模型的急性乳腺炎全病程风险预测与综合治疗方案研究
  • Playwright Python API 测试:从入门到实践
  • 滑动窗口 -- 灵神刷题
  • C# 异常处理进阶:精准获取错误行号的通用方案
  • ubuntu安装devkitPro