docker_daily_scripts
Docker 40个高频运维脚本合集
通用说明
所有脚本通过 sudo cat 创建,sudo chmod +x 添加执行权限后即可直接运行。
传参规则:按顺序在脚本后追加参数,格式 ./脚本名.sh 参数1 参数2 ...
容器常用参数:-d 后台运行、--name 指定容器名、-p 端口映射、-e 环境变量、-v 数据卷挂载
一、容器启停 & 批量管理(1–10)
1. 批量启动所有容器
sudo cat > ./docker_start_all.sh << 'EOF'
#!/bin/bash
docker start $(docker ps -aq)
EOF
sudo chmod +x ./docker_start_all.sh
- 传参:无
- 示例:
./docker_start_all.sh在任何目录直接输入就能运行 - 说明:启动全部容器(包含已停止容器),服务器重启后快速恢复服务。
2. 批量停止运行中容器
sudo cat > ./docker_stop_all.sh << 'EOF'
#!/bin/bash
docker stop $(docker ps -q)
EOF
sudo chmod +x ./docker_stop_all.sh
- 传参:无
- 示例:
./docker_stop_all.sh - 说明:仅停止当前正在运行的容器,整机维护专用。
3. 批量重启所有运行容器
sudo cat > ./docker_restart_all.sh << 'EOF'
#!/bin/bash
docker restart $(docker ps -q)
EOF
sudo chmod +x ./docker_restart_all.sh
- 传参:无
- 示例:
./docker_restart_all.sh - 说明:一键重启全部在线容器,适合配置临时生效场景。
4. 批量删除已停止容器
sudo cat > ./docker_rm_exited.sh << 'EOF'
#!/bin/bash
docker rm $(docker ps -aq -f "status=exited")
EOF
sudo chmod +x ./docker_rm_exited.sh
- 传参:无
- 示例:
./docker_rm_exited.sh - 说明:过滤退出状态容器并批量删除,释放系统资源。
5. 删除单个容器(传参)
sudo cat > ./docker_rm_container.sh << 'EOF'
#!/bin/bash
docker rm $1
EOF
sudo chmod +x ./docker_rm_container.sh
- 传参:
$1- 容器名称 / 容器ID - 示例:
./docker_rm_container.sh nginx./docker_rm_container.sh 8a2b3c4d
- 说明:删除指定正常停止的容器。
6. 强制停止并删除容器
sudo cat > ./docker_rm_force.sh << 'EOF'
#!/bin/bash
docker rm -f $1
EOF
sudo chmod +x ./docker_rm_force.sh
- 传参:
$1- 容器名称 / 容器ID - 示例:
./docker_rm_force.sh mysql - 说明:
-f强制停止+删除,容器卡死、无法正常停止时使用。
7. 临时容器(退出自动删除)
sudo cat > ./docker_run_temp.sh << 'EOF'
#!/bin/bash
IMAGE=$1
docker run --rm $IMAGE
EOF
sudo chmod +x ./docker_run_temp.sh
- 传参:
$1- 镜像名称(可带标签) - 示例:
./docker_run_temp.sh alpine:latest - 说明:
--rm容器退出自动销毁,用于临时测试、命令调试。
8. 容器设置自动重启
sudo cat > ./docker_set_autorestart.sh << 'EOF'
#!/bin/bash
docker update --restart always $1
EOF
sudo chmod +x ./docker_set_autorestart.sh
- 传参:
$1- 容器名称 / 容器ID - 示例:
./docker_set_autorestart.sh nginx - 说明:容器崩溃、服务器重启后自动拉起,保障服务在线。
9. 取消容器自动重启
sudo cat > ./docker_cancel_autorestart.sh << 'EOF'
#!/bin/bash
docker update --restart no $1
EOF
sudo chmod +x ./docker_cancel_autorestart.sh
- 传参:
$1- 容器名称 / 容器ID - 示例:
./docker_cancel_autorestart.sh mysql - 说明:关闭容器开机/故障自启策略。
10. 批量给所有容器开启自启
sudo cat > ./docker_batch_autorestart.sh << 'EOF'
#!/bin/bash
docker update --restart always $(docker ps -aq)
EOF
sudo chmod +x ./docker_batch_autorestart.sh
- 传参:无
- 示例:
./docker_batch_autorestart.sh - 说明:全局批量配置所有容器自动重启。
二、镜像管理 & 清理(11–20)
11. 拉取镜像
sudo cat > ./docker_pull_img.sh << 'EOF'
#!/bin/bash
docker pull $1
EOF
sudo chmod +x ./docker_pull_img.sh
- 传参:
$1- 镜像名:标签 - 示例:
./docker_pull_img.sh nginx:1.24 - 说明:拉取指定远程镜像。
12. 删除单个镜像
sudo cat > ./docker_rmi_img.sh << 'EOF'
#!/bin/bash
docker rmi $1
EOF
sudo chmod +x ./docker_rmi_img.sh
- 传参:
$1- 镜像ID / 镜像名:标签 - 示例:
./docker_rmi_img.sh nginx:1.22 - 说明:删除本地指定镜像。
13. 清理悬空镜像(无用残片)
sudo cat > ./docker_clean_dangling.sh << 'EOF'
#!/bin/bash
docker rmi $(docker images -q -f dangling=true)
EOF
sudo chmod +x ./docker_clean_dangling.sh
- 传参:无
- 示例:
./docker_clean_dangling.sh - 说明:删除无标签、未被引用的无效镜像,释放磁盘。
14. 一键全量清理 Docker 垃圾
sudo cat > ./docker_prune.sh << 'EOF'
#!/bin/bash
docker system prune -f
EOF
sudo chmod +x ./docker_prune.sh
- 传参:无
- 示例:
./docker_prune.sh - 说明:清理停止容器、悬空镜像、无用网络,
-f跳过交互确认。
15. 清理镜像+容器+网络+数据卷
sudo cat > ./docker_prune_all.sh << 'EOF'
#!/bin/bash
docker system prune -a -f --volumes
EOF
sudo chmod +x ./docker_prune_all.sh
- 传参:无
- 示例:
./docker_prune_all.sh - 说明:彻底清理所有未使用资源,包含闲置数据卷,谨慎在生产执行。
16. 导出镜像为本地文件
sudo cat > ./docker_save_img.sh << 'EOF'
#!/bin/bash
IMG=$1
OUT_FILE="${IMG//:/_}.tar"
docker save -o $OUT_FILE $IMG
EOF
sudo chmod +x ./docker_save_img.sh
- 传参:
$1- 镜像名:标签 - 示例:
./docker_save_img.sh nginx:1.24导出为nginx_1.24.tar - 说明:将镜像打包为 tar,用于离线迁移。
17. 导入本地镜像文件
sudo cat > ./docker_load_img.sh << 'EOF'
#!/bin/bash
docker load -i $1
EOF
sudo chmod +x ./docker_load_img.sh
- 传参:
$1- 本地镜像 tar 包路径/文件名 - 示例:
./docker_load_img.sh nginx_1.24.tar - 说明:从 tar 包导入镜像,离线环境部署必备。
18. 给镜像打新标签
sudo cat > ./docker_tag_img.sh << 'EOF'
#!/bin/bash
OLD_IMG=$1
NEW_IMG=$2
docker tag $OLD_IMG $NEW_IMG
EOF
sudo chmod +x ./docker_tag_img.sh
- 传参:
$1- 原镜像名:标签,$2- 新镜像名:标签 - 示例:
./docker_tag_img.sh nginx:1.24 nginx:latest - 说明:重命名/打标签,用于镜像仓库推送、版本管理。
19. 查看本地所有镜像列表
sudo cat > ./docker_list_img.sh << 'EOF'
#!/bin/bash
docker images
EOF
sudo chmod +x ./docker_list_img.sh
- 传参:无
- 示例:
./docker_list_img.sh - 说明:查看全部本地镜像、大小、版本。
20. 按名称过滤镜像
sudo cat > ./docker_grep_img.sh << 'EOF'
#!/bin/bash
docker images | grep $1
EOF
sudo chmod +x ./docker_grep_img.sh
- 传参:
$1- 镜像关键词 - 示例:
./docker_grep_img.sh mysql - 说明:快速检索指定名称的镜像。
三、日志查看 & 日志管控(21–28)
21. 查看容器实时日志
sudo cat > ./docker_logs_follow.sh << 'EOF'
#!/bin/bash
docker logs -f $1
EOF
sudo chmod +x ./docker_logs_follow.sh
- 传参:
$1- 容器名称 / 容器ID - 示例:
./docker_logs_follow.sh nginx,按 Ctrl+C 退出 - 说明:
-f实时滚动输出日志,排查运行异常。
22. 查看容器最后100行日志
sudo cat > ./docker_logs_tail.sh << 'EOF'
#!/bin/bash
docker logs --tail 100 $1
EOF
sudo chmod +x ./docker_logs_tail.sh
- 传参:
$1- 容器名称 / 容器ID - 示例:
./docker_logs_tail.sh mysql - 说明:只读取末尾日志,避免日志量过大刷屏。
23. 批量查看所有运行容器日志
sudo cat > ./docker_batch_logs.sh << 'EOF'
#!/bin/bash
docker ps -q | xargs docker logs --tail 20
EOF
sudo chmod +x ./docker_batch_logs.sh
- 传参:无
- 示例:
./docker_batch_logs.sh - 说明:批量输出所有在线容器最新20行日志,日常巡检。
24. 进入容器终端交互
sudo cat > ./docker_exec_bash.sh << 'EOF'
#!/bin/bash
docker exec -it $1 /bin/bash
EOF
sudo chmod +x ./docker_exec_bash.sh
- 传参:
$1- 容器名称 / 容器ID - 示例:
./docker_exec_bash.sh nginx - 说明:交互式进入容器内部操作、排错。输入
exit退出终端。
25. 容器内执行单次命令(不进入终端)
sudo cat > ./docker_exec_cmd.sh << 'EOF'
#!/bin/bash
CONTAINER=$1
CMD=${*:2}
docker exec $CONTAINER $CMD
EOF
sudo chmod +x ./docker_exec_cmd.sh
- 传参:
$1- 容器名称/容器ID,后续参数 - 容器内执行的命令 - 示例:
./docker_exec_cmd.sh nginx ls -l./docker_exec_cmd.sh mysql ip addr
- 说明:无需进入终端,直接远程执行命令。
26. 手动清空容器日志文件
sudo cat > ./docker_clear_log.sh << 'EOF'
#!/bin/bash
LOG_FILE=$(docker inspect --format='{{.LogPath}}' $1)
cat /dev/null > $LOG_FILE
EOF
sudo chmod +x ./docker_clear_log.sh
- 传参:
$1- 容器名称 / 容器ID - 示例:
./docker_clear_log.sh nginx - 说明:在线清空日志,无需重启容器。
27. 全局限制容器日志大小(永久配置)
sudo cat > ./docker_limit_log.sh << 'EOF'
#!/bin/bash
cat > /etc/docker/daemon.json <<EOF2
{
"log-driver":"json-file",
"log-opts":{
"max-size":"50m",
"max-file":"3"
}
}
EOF2
systemctl restart docker
EOF
sudo chmod +x ./docker_limit_log.sh
- 传参:无
- 示例:
sudo ./docker_limit_log.sh - 说明:全局配置,单日志文件最大50M,最多保留3份,防止日志爆盘,需 root 权限。
28. 查看容器日志文件路径
sudo cat > ./docker_get_log_path.sh << 'EOF'
#!/bin/bash
docker inspect --format='{{.LogPath}}' $1
EOF
sudo chmod +x ./docker_get_log_path.sh
- 传参:
$1- 容器名称 / 容器ID - 示例:
./docker_get_log_path.sh mysql - 说明:快速定位容器日志真实存储位置。
四、备份、迁移 & 文件互传(29–34)
29. 容器文件拷贝到宿主机
sudo cat > ./docker_cp_to_host.sh << 'EOF'
#!/bin/bash
CONTAINER=$1
SRC=$2
DEST=$3
docker cp $CONTAINER:$SRC $DEST
EOF
sudo chmod +x ./docker_cp_to_host.sh
- 传参:
$1- 容器名称/ID,$2- 容器内源路径,$3- 宿主机目标路径 - 示例:
./docker_cp_to_host.sh nginx /etc/nginx /backup - 说明:容器内文件/目录下载到宿主机。
30. 宿主机文件上传到容器
sudo cat > ./docker_cp_to_container.sh << 'EOF'
#!/bin/bash
SRC=$1
CONTAINER=$2
DEST=$3
docker cp $SRC $CONTAINER:$DEST
EOF
sudo chmod +x ./docker_cp_to_container.sh
- 传参:
$1- 宿主机源路径,$2- 容器名称/ID,$3- 容器内目标路径 - 示例:
./docker_cp_to_container.sh ./index.html nginx /usr/share/nginx/html - 说明:本地文件上传至容器指定目录。
31. 导出整个容器为备份包
sudo cat > ./docker_export_container.sh << 'EOF'
#!/bin/bash
CONTAINER=$1
BACKUP="${CONTAINER}_$(date +%F).tar"
docker export $CONTAINER > $BACKUP
EOF
sudo chmod +x ./docker_export_container.sh
- 传参:
$1- 容器名称 / 容器ID - 示例:
./docker_export_container.sh mysql导出为mysql_2026-05-28.tar - 说明:全量导出容器文件系统,用于整机迁移。
32. 从备份包导入为镜像
sudo cat > ./docker_import_container.sh << 'EOF'
#!/bin/bash
FILE=$1
docker import $FILE restore_img:latest
EOF
sudo chmod +x ./docker_import_container.sh
- 传参:
$1- 容器备份 tar 包路径/文件名 - 示例:
./docker_import_container.sh mysql_2026-05-28.tar - 说明:将容器备份包还原为镜像,镜像名固定为
restore_img:latest。
33. 数据卷备份打包
sudo cat > ./docker_backup_volume.sh << 'EOF'
#!/bin/bash
VOLUME=$1
BACKUP=volume_${VOLUME}_$(date +%F).tar.gz
docker run --rm -v $VOLUME:/src -v $(pwd):/backup alpine tar -zcvf /backup/$BACKUP /src
EOF
sudo chmod +x ./docker_backup_volume.sh
- 传参:
$1- Docker 数据卷名称 - 示例:
./docker_backup_volume.sh mysql_data - 说明:单独备份 Docker 数据卷数据,自动生成带日期的压缩包。
34. 数据卷恢复
sudo cat > ./docker_restore_volume.sh << 'EOF'
#!/bin/bash
FILE=$1
VOLUME=$2
docker run --rm -v $VOLUME:/dst -v $(pwd):/backup alpine tar -zxvf /backup/$FILE -C /dst
EOF
sudo chmod +x ./docker_restore_volume.sh
- 传参:
$1- 备份压缩包文件名,$2- 目标数据卷名称 - 示例:
./docker_restore_volume.sh volume_mysql_data_2026-05-28.tar.gz mysql_data - 说明:解压备份包恢复至目标数据卷。
五、网络、端口、资源监控(35–40)
35. 查看所有容器端口映射
sudo cat > ./docker_list_port.sh << 'EOF'
#!/bin/bash
docker ps --format "{{.Names}} -> {{.Ports}}"
EOF
sudo chmod +x ./docker_list_port.sh
- 传参:无
- 示例:
./docker_list_port.sh - 说明:格式化展示容器名与端口对应关系。
36. 创建自定义桥接网络
sudo cat > ./docker_create_network.sh << 'EOF'
#!/bin/bash
NET_NAME=$1
docker network create $NET_NAME
EOF
sudo chmod +x ./docker_create_network.sh
- 传参:
$1- 自定义网络名称 - 示例:
./docker_create_network.sh app_net - 说明:创建独立隔离网络,用于微服务集群。
37. 容器接入指定网络
sudo cat > ./docker_connect_network.sh << 'EOF'
#!/bin/bash
CONTAINER=$1
NET=$2
docker network connect $NET $CONTAINER
EOF
sudo chmod +x ./docker_connect_network.sh
- 传参:
$1- 容器名称/ID,$2- 已存在的网络名称 - 示例:
./docker_connect_network.sh nginx app_net - 说明:将已有容器加入自定义网络。
38. 查看容器资源实时占用
sudo cat > ./docker_stats_single.sh << 'EOF'
#!/bin/bash
docker stats $1
EOF
sudo chmod +x ./docker_stats_single.sh
- 传参:
$1- 容器名称 / 容器ID - 示例:
./docker_stats_single.sh mysql - 说明:实时查看单个容器 CPU、内存、网络、IO 占用,Ctrl+C 退出。
39. 一次性统计容器资源(不刷新)
sudo cat > ./docker_stats_all.sh << 'EOF'
#!/bin/bash
docker stats --no-stream
EOF
sudo chmod +x ./docker_stats_all.sh
- 传参:无
- 示例:
./docker_stats_all.sh - 说明:静态输出所有容器资源占用,适合脚本采集、批量巡检。
40. 一键集群启停综合脚本(整合版)
sudo cat > ./docker_tool.sh << 'EOF'
#!/bin/bash
case $1 in
start)
echo "=== 启动所有容器 ==="
docker start $(docker ps -aq -f status=exited)
;;
stop)
echo "=== 停止所有容器 ==="
docker stop $(docker ps -q)
;;
restart)
echo "=== 重启所有容器 ==="
docker restart $(docker ps -q)
;;
clean)
echo "=== 清理停止容器 & 悬空镜像 ==="
docker rm $(docker ps -aq -f status=exited)
docker rmi $(docker images -q -f dangling=true)
;;
*)
echo "用法: $0 [start|stop|restart|clean]"
;;
esac
EOF
sudo chmod +x ./docker_tool.sh
- 传参:
$1- 功能指令,可选start/stop/restart/clean - 示例:
./docker_tool.sh start./docker_tool.sh stop./docker_tool.sh clean
- 说明:集成启停、重启、垃圾清理四大功能,运维统一入口。
通用补充说明
- 权限要求:涉及系统配置(如 daemon.json)、批量清理命令,建议使用 root 或 sudo 执行。
- 安全提醒:
docker rm -f、docker system prune -a --volumes为高危删除操作,生产环境执行前务必确认。 - 脚本命名建议:可按功能命名,如
docker_rm_container.sh、docker_pull_img.sh,方便日常调用。