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"