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

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"

相关文章:

  • C++哈希表:冲突解决与高效查找
  • 总结:线程安全问题的原因和解决方案
  • 结构化控制语言(SCL) 与梯形图(LAD)相互转换的步骤指南
  • 16QAM在瑞利信道下的性能仿真:从理论到实践的完整解析(附完整代码)
  • PH热榜 | 2025-06-01
  • SpringBoot-Thymeleaf
  • Arch安装botw-save-state
  • Google 发布的全新导航库:Jetpack Navigation 3
  • MySQL中的事务
  • Figma 中构建 Master Control Panel (MCP) 的完整设计方案
  • 【python深度学习】Day43 复习日
  • Go开发简历优化指南
  • ESP-IDF 离线安装——同时存在多个版本以及进行版本切换的方法
  • 头指针 VS 头节点 VS 首元节点
  • Day43打卡(补41+42) @浙大疏锦行
  • 【dshow】VIDEOINFOHEADER2 头文件
  • Java内存模型与互斥锁
  • Nuxt3部署
  • 机器视觉图像形态学中的腐蚀、膨胀、开运算、闭运算
  • 人工智能工程技术专业 和 其他信息技术专业 有哪些关联性?
  • 网站优化及推广方案/石家庄网站建设方案
  • 微信显示wordpress/seo站点
  • 设计参考网站有哪些/网站交易平台
  • 教育部学风建设专题网站/天津seo招聘
  • 网站建设客服工作/无需下载直接进入的网站的代码
  • 粉丝帮女流做的网站/网络广告形式