更新至 docker-tools_v2.1.0 版本(修复部分问题;更新 docker 和 docker compose 版本为最新版)
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Bash(bash -n docker-tools)",
|
||||
"WebFetch(domain:github.com)",
|
||||
"WebFetch(domain:download.docker.com)",
|
||||
"Bash(ls -la releases/)",
|
||||
"Bash(find . -maxdepth 3 -type d -name \"release*\" -o -name \"dist\")",
|
||||
"Bash(unzip -l releases/docker-tools_v2.0.0.zip)",
|
||||
"Bash(rm -f ../releases/docker-tools_v2.1.0.zip)",
|
||||
"Bash(zip ../releases/docker-tools_v2.1.0.zip docker-tools daemon.json docker.service docker.socket)",
|
||||
"Bash(powershell -NoProfile -Command \"Compress-Archive -Path docker-tools,daemon.json,docker.service,docker.socket -DestinationPath ../releases/docker-tools_v2.1.0.zip -Force\")",
|
||||
"Bash(unzip -l releases/docker-tools_v2.1.0.zip)"
|
||||
]
|
||||
}
|
||||
}
|
||||
+73
-19
@@ -2,7 +2,7 @@
|
||||
|
||||
|
||||
|
||||
\[!\[Version](https://img.shields.io/badge/version-2.0.0-blue.svg)](https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/docker-tools)
|
||||
\[!\[Version](https://img.shields.io/badge/version-2.1.0-blue.svg)](https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/docker-tools)
|
||||
|
||||
\[!\[License](https://img.shields.io/badge/license-GNU-green.svg)](https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/LICENSE)
|
||||
|
||||
@@ -160,9 +160,9 @@ cd shell\_tools/docker-tools
|
||||
|
||||
\# 方式二:直接下载
|
||||
|
||||
wget https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/releases/docker-tools\_v2.0.0.zip
|
||||
wget https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/releases/docker-tools\_v2.1.0.zip
|
||||
|
||||
unzip docker-tools\_v2.0.0.zip
|
||||
unzip docker-tools\_v2.1.0.zip
|
||||
|
||||
```
|
||||
|
||||
@@ -194,7 +194,7 @@ sudo ./docker-tools.sh install
|
||||
|
||||
\# 或者指定版本安装
|
||||
|
||||
sudo ./docker-tools.sh -v 29.1.4 -c v5.0.1 install
|
||||
sudo ./docker-tools.sh -v 29.4.1 -c v5.1.3 install
|
||||
|
||||
```
|
||||
|
||||
@@ -240,7 +240,7 @@ docker info
|
||||
|
||||
```bash
|
||||
|
||||
\# 默认安装(Docker 29.1.4 + Compose v5.0.1)
|
||||
\# 默认安装(Docker 29.4.1 + Compose v5.1.3)
|
||||
|
||||
sudo ./docker-tools.sh install
|
||||
|
||||
@@ -248,7 +248,7 @@ sudo ./docker-tools.sh install
|
||||
|
||||
\# 指定版本安装
|
||||
|
||||
sudo ./docker-tools.sh -v 29.1.4 -c v5.0.1 install
|
||||
sudo ./docker-tools.sh -v 29.4.1 -c v5.1.3 install
|
||||
|
||||
|
||||
|
||||
@@ -280,13 +280,13 @@ sudo ./docker-tools.sh -i /data/docker/bin -d /data/docker/data install
|
||||
|
||||
\# 下载 Docker Engine
|
||||
|
||||
wget https://download.docker.com/linux/static/stable/x86\_64/docker-29.1.4.tgz
|
||||
wget https://download.docker.com/linux/static/stable/x86\_64/docker-29.4.1.tgz
|
||||
|
||||
|
||||
|
||||
\# 下载 Docker Compose
|
||||
|
||||
wget https://github.com/docker/compose/releases/download/v5.0.1/docker-compose-linux-x86\_64
|
||||
wget https://github.com/docker/compose/releases/download/v5.1.3/docker-compose-linux-x86\_64
|
||||
|
||||
```
|
||||
|
||||
@@ -300,7 +300,7 @@ wget https://github.com/docker/compose/releases/download/v5.0.1/docker-compose-l
|
||||
|
||||
\# 将安装包和脚本上传到同一目录
|
||||
|
||||
scp docker-29.1.4.tgz docker-compose-linux-x86\_64 docker-tools.sh user@server:/path/to/dir/
|
||||
scp docker-29.4.1.tgz docker-compose-linux-x86\_64 docker-tools.sh user@server:/path/to/dir/
|
||||
|
||||
```
|
||||
|
||||
@@ -312,7 +312,7 @@ scp docker-29.1.4.tgz docker-compose-linux-x86\_64 docker-tools.sh user@server:/
|
||||
|
||||
```bash
|
||||
|
||||
sudo ./docker-tools.sh -p docker-29.1.4.tgz -n docker-compose-linux-x86\_64 install
|
||||
sudo ./docker-tools.sh -p docker-29.4.1.tgz -n docker-compose-linux-x86\_64 install
|
||||
|
||||
```
|
||||
|
||||
@@ -478,7 +478,7 @@ sudo ./docker-tools.sh \\
|
||||
|
||||
sudo ./docker-tools.sh \\
|
||||
|
||||
-p docker-29.1.4.tgz \\
|
||||
-p docker-29.4.1.tgz \\
|
||||
|
||||
-n docker-compose-linux-x86\_64 \\
|
||||
|
||||
@@ -548,13 +548,13 @@ sudo ./docker-tools.sh \\
|
||||
|
||||
\# 在线更新到指定版本
|
||||
|
||||
sudo ./docker-tools.sh -v 29.1.4 update
|
||||
sudo ./docker-tools.sh -v 29.4.1 update
|
||||
|
||||
|
||||
|
||||
\# 离线更新
|
||||
|
||||
sudo ./docker-tools.sh -p docker-29.1.4.tgz update
|
||||
sudo ./docker-tools.sh -p docker-29.4.1.tgz update
|
||||
|
||||
```
|
||||
|
||||
@@ -572,15 +572,15 @@ sudo ./docker-tools.sh -p docker-29.1.4.tgz update
|
||||
|
||||
|------|------|--------|------|
|
||||
|
||||
| `-v` | Docker Engine 版本 | 29.1.4 | `-v 28.2.1` |
|
||||
| `-v` | Docker Engine 版本 | 29.4.1 | `-v 28.2.1` |
|
||||
|
||||
| `-i` | Docker 安装目录 | /opt/docker/bin | `-i /data/docker/bin` |
|
||||
|
||||
| `-d` | Docker 数据目录 | /opt/docker/data | `-d /data/docker/data` |
|
||||
|
||||
| `-p` | Docker Engine 安装包名称(离线) | - | `-p docker-29.1.4.tgz` |
|
||||
| `-p` | Docker Engine 安装包名称(离线) | - | `-p docker-29.4.1.tgz` |
|
||||
|
||||
| `-c` | Docker Compose 版本 | v5.0.1 | `-c v2.36.2` |
|
||||
| `-c` | Docker Compose 版本 | v5.1.3 | `-c v2.36.2` |
|
||||
|
||||
| `-n` | Docker Compose 安装包名称(离线) | - | `-n docker-compose-linux-x86\_64` |
|
||||
|
||||
@@ -616,7 +616,7 @@ vim docker-tools.sh
|
||||
|
||||
\# 修改以下变量
|
||||
|
||||
DOCKER\_VERSION=29.1.4 # Docker 版本
|
||||
DOCKER\_VERSION=29.4.1 # Docker 版本
|
||||
|
||||
DOCKER\_INSTALL\_DIR=/opt/docker/bin # 安装目录
|
||||
|
||||
@@ -806,7 +806,7 @@ ls -lh docker-\*.tgz docker-compose-\*
|
||||
|
||||
\# 确保文件名正确
|
||||
|
||||
./docker-tools.sh -p docker-29.1.4.tgz -n docker-compose-linux-x86\_64 install
|
||||
./docker-tools.sh -p docker-29.4.1.tgz -n docker-compose-linux-x86\_64 install
|
||||
|
||||
```
|
||||
|
||||
@@ -934,7 +934,7 @@ sudo rm -rf /tmp/docker-\*
|
||||
|
||||
\# 重新安装
|
||||
|
||||
sudo ./docker-tools.sh -v 29.1.4 install
|
||||
sudo ./docker-tools.sh -v 29.4.1 install
|
||||
|
||||
```
|
||||
|
||||
@@ -1216,6 +1216,60 @@ docker run -d \\
|
||||
|
||||
|
||||
|
||||
\## 📝 更新日志
|
||||
|
||||
\### v2.1.0 (2026-04-24)
|
||||
|
||||
\#### 🆕 版本更新
|
||||
|
||||
\- 默认 Docker Engine 升级至 \*\*29.4.1\*\*
|
||||
|
||||
\- 默认 Docker Compose 升级至 \*\*v5.1.3\*\*
|
||||
|
||||
\#### 🐛 问题修复
|
||||
|
||||
\- 修复子命令调度:`case "$@"` 多参数无法匹配;`info` 未调用到 `info_docker`
|
||||
|
||||
\- 修复 `check_net` 中 TIMEOUT 位置参数误用,以及 2xx/3xx 被错误当作失败码
|
||||
|
||||
\- 修复 `backup_file` 对目录无效导致升级前未实际备份
|
||||
|
||||
\- 修复 `remove_env` 使用 sed 直删导致残留空行,改用范围删除
|
||||
|
||||
\- 修复 `docker.service` 中注释与 `ExecStart=` 残留混行
|
||||
|
||||
\- 修复拼写错误(Dokcer / Coimpose / Conpose)
|
||||
|
||||
\#### ✨ 健壮性增强
|
||||
|
||||
\- `config_env` 幂等化:重复安装不再重复追加 `~/.bashrc`、`/etc/profile`
|
||||
|
||||
\- 脚本内不再 `source ~/.bashrc`,避免 `set -u` 下被外部脚本污染中断
|
||||
|
||||
\- `daemon.json` 模板替换后校验,防止 `{{...}}` 占位符残留导致 JSON 非法
|
||||
|
||||
\- 数据目录仅改 owner,不再 `chmod -R 755`,避免破坏镜像层权限
|
||||
|
||||
\- `chown docker.docker` 更新为 `docker:docker`(点分隔语法已弃用)
|
||||
|
||||
\- 去掉 `useradd/groupadd` 硬编码 UID/GID=1001,避免与目标机冲突
|
||||
|
||||
\- `CPU_ARCH` 改为运行时探测,扩展支持 `aarch64`
|
||||
|
||||
\- `getopts` 增加 `?` / `:` 错误分支,且 `-r/-m/-t` 不再隐式启用 Swarm
|
||||
|
||||
\- Swarm worker 模式对 Manager IP 与 Token 强校验
|
||||
|
||||
\- `only_install_docker_compose` 在 Docker Engine 未运行时跳过 restart/info
|
||||
|
||||
\### v2.0.0
|
||||
|
||||
\- 重构日志系统、加入 `set -euo pipefail`、完善交互确认
|
||||
|
||||
\### v1.3.x / v1.2.x / v1.1.x
|
||||
|
||||
\- 详见 git 提交历史
|
||||
|
||||
\## 👤 作者
|
||||
|
||||
|
||||
|
||||
+73
-19
@@ -2,7 +2,7 @@
|
||||
|
||||
|
||||
|
||||
\[!\[Version](https://img.shields.io/badge/version-2.0.0-blue.svg)](https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/docker-tools)
|
||||
\[!\[Version](https://img.shields.io/badge/version-2.1.0-blue.svg)](https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/docker-tools)
|
||||
|
||||
\[!\[License](https://img.shields.io/badge/license-GNU-green.svg)](https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/LICENSE)
|
||||
|
||||
@@ -160,9 +160,9 @@ cd shell\_tools/docker-tools
|
||||
|
||||
\# Method 2: Direct download
|
||||
|
||||
wget https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/releases/docker-tools\_v2.0.0.zip
|
||||
wget https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/releases/docker-tools\_v2.1.0.zip
|
||||
|
||||
unzip docker-tools\_v2.0.0.zip
|
||||
unzip docker-tools\_v2.1.0.zip
|
||||
|
||||
```
|
||||
|
||||
@@ -194,7 +194,7 @@ sudo ./docker-tools.sh install
|
||||
|
||||
\# Or specify version
|
||||
|
||||
sudo ./docker-tools.sh -v 29.1.4 -c v5.0.1 install
|
||||
sudo ./docker-tools.sh -v 29.4.1 -c v5.1.3 install
|
||||
|
||||
```
|
||||
|
||||
@@ -240,7 +240,7 @@ docker info
|
||||
|
||||
```bash
|
||||
|
||||
\# Default installation (Docker 29.1.4 + Compose v5.0.1)
|
||||
\# Default installation (Docker 29.4.1 + Compose v5.1.3)
|
||||
|
||||
sudo ./docker-tools.sh install
|
||||
|
||||
@@ -248,7 +248,7 @@ sudo ./docker-tools.sh install
|
||||
|
||||
\# Specify version
|
||||
|
||||
sudo ./docker-tools.sh -v 29.1.4 -c v5.0.1 install
|
||||
sudo ./docker-tools.sh -v 29.4.1 -c v5.1.3 install
|
||||
|
||||
|
||||
|
||||
@@ -280,13 +280,13 @@ Download packages on a machine with network access:
|
||||
|
||||
\# Download Docker Engine
|
||||
|
||||
wget https://download.docker.com/linux/static/stable/x86\_64/docker-29.1.4.tgz
|
||||
wget https://download.docker.com/linux/static/stable/x86\_64/docker-29.4.1.tgz
|
||||
|
||||
|
||||
|
||||
\# Download Docker Compose
|
||||
|
||||
wget https://github.com/docker/compose/releases/download/v5.0.1/docker-compose-linux-x86\_64
|
||||
wget https://github.com/docker/compose/releases/download/v5.1.3/docker-compose-linux-x86\_64
|
||||
|
||||
```
|
||||
|
||||
@@ -300,7 +300,7 @@ wget https://github.com/docker/compose/releases/download/v5.0.1/docker-compose-l
|
||||
|
||||
\# Upload packages and script to the same directory
|
||||
|
||||
scp docker-29.1.4.tgz docker-compose-linux-x86\_64 docker-tools.sh user@server:/path/to/dir/
|
||||
scp docker-29.4.1.tgz docker-compose-linux-x86\_64 docker-tools.sh user@server:/path/to/dir/
|
||||
|
||||
```
|
||||
|
||||
@@ -312,7 +312,7 @@ scp docker-29.1.4.tgz docker-compose-linux-x86\_64 docker-tools.sh user@server:/
|
||||
|
||||
```bash
|
||||
|
||||
sudo ./docker-tools.sh -p docker-29.1.4.tgz -n docker-compose-linux-x86\_64 install
|
||||
sudo ./docker-tools.sh -p docker-29.4.1.tgz -n docker-compose-linux-x86\_64 install
|
||||
|
||||
```
|
||||
|
||||
@@ -478,7 +478,7 @@ sudo ./docker-tools.sh \\
|
||||
|
||||
sudo ./docker-tools.sh \\
|
||||
|
||||
-p docker-29.1.4.tgz \\
|
||||
-p docker-29.4.1.tgz \\
|
||||
|
||||
-n docker-compose-linux-x86\_64 \\
|
||||
|
||||
@@ -548,13 +548,13 @@ sudo ./docker-tools.sh \\
|
||||
|
||||
\# Online update to specified version
|
||||
|
||||
sudo ./docker-tools.sh -v 29.1.4 update
|
||||
sudo ./docker-tools.sh -v 29.4.1 update
|
||||
|
||||
|
||||
|
||||
\# Offline update
|
||||
|
||||
sudo ./docker-tools.sh -p docker-29.1.4.tgz update
|
||||
sudo ./docker-tools.sh -p docker-29.4.1.tgz update
|
||||
|
||||
```
|
||||
|
||||
@@ -572,15 +572,15 @@ sudo ./docker-tools.sh -p docker-29.1.4.tgz update
|
||||
|
||||
|-----------|-------------|---------|---------|
|
||||
|
||||
| `-v` | Docker Engine version | 29.1.4 | `-v 28.2.1` |
|
||||
| `-v` | Docker Engine version | 29.4.1 | `-v 28.2.1` |
|
||||
|
||||
| `-i` | Docker installation directory | /opt/docker/bin | `-i /data/docker/bin` |
|
||||
|
||||
| `-d` | Docker data directory | /opt/docker/data | `-d /data/docker/data` |
|
||||
|
||||
| `-p` | Docker Engine package name (offline) | - | `-p docker-29.1.4.tgz` |
|
||||
| `-p` | Docker Engine package name (offline) | - | `-p docker-29.4.1.tgz` |
|
||||
|
||||
| `-c` | Docker Compose version | v5.0.1 | `-c v2.36.2` |
|
||||
| `-c` | Docker Compose version | v5.1.3 | `-c v2.36.2` |
|
||||
|
||||
| `-n` | Docker Compose package name (offline) | - | `-n docker-compose-linux-x86\_64` |
|
||||
|
||||
@@ -616,7 +616,7 @@ vim docker-tools.sh
|
||||
|
||||
\# Modify these variables
|
||||
|
||||
DOCKER\_VERSION=29.1.4 # Docker version
|
||||
DOCKER\_VERSION=29.4.1 # Docker version
|
||||
|
||||
DOCKER\_INSTALL\_DIR=/opt/docker/bin # Installation directory
|
||||
|
||||
@@ -806,7 +806,7 @@ ls -lh docker-\*.tgz docker-compose-\*
|
||||
|
||||
\# Ensure correct filenames
|
||||
|
||||
./docker-tools.sh -p docker-29.1.4.tgz -n docker-compose-linux-x86\_64 install
|
||||
./docker-tools.sh -p docker-29.4.1.tgz -n docker-compose-linux-x86\_64 install
|
||||
|
||||
```
|
||||
|
||||
@@ -934,7 +934,7 @@ sudo rm -rf /tmp/docker-\*
|
||||
|
||||
\# Reinstall
|
||||
|
||||
sudo ./docker-tools.sh -v 29.1.4 install
|
||||
sudo ./docker-tools.sh -v 29.4.1 install
|
||||
|
||||
```
|
||||
|
||||
@@ -1216,6 +1216,60 @@ docker run -d \\
|
||||
|
||||
|
||||
|
||||
\## 📝 Changelog
|
||||
|
||||
\### v2.1.0 (2026-04-24)
|
||||
|
||||
\#### 🆕 Version Updates
|
||||
|
||||
\- Default Docker Engine bumped to \*\*29.4.1\*\*
|
||||
|
||||
\- Default Docker Compose bumped to \*\*v5.1.3\*\*
|
||||
|
||||
\#### 🐛 Bug Fixes
|
||||
|
||||
\- Fix subcommand dispatch: `case "$@"` failed on multi-arg; `info` missed `info_docker`
|
||||
|
||||
\- Fix `check_net` TIMEOUT positional-param misuse, and 2xx/3xx incorrectly treated as failures
|
||||
|
||||
\- Fix `backup_file` not working on directories (upgrades previously skipped backup)
|
||||
|
||||
\- Fix `remove_env` leaving blank lines; switched to range deletion via sed
|
||||
|
||||
\- Fix leftover mixed line with comment and `ExecStart=` in `docker.service`
|
||||
|
||||
\- Fix typos (Dokcer / Coimpose / Conpose)
|
||||
|
||||
\#### ✨ Robustness
|
||||
|
||||
\- `config_env` is now idempotent — repeated installs no longer duplicate `~/.bashrc` / `/etc/profile`
|
||||
|
||||
\- No longer `source ~/.bashrc` inside the script (prevents `set -u` crashes from third-party rc files)
|
||||
|
||||
\- Validate `daemon.json` after template substitution to catch unfilled `{{...}}` placeholders
|
||||
|
||||
\- Data directory owner-only changes; dropped `chmod -R 755` which could break image layer permissions
|
||||
|
||||
\- Replace deprecated `chown docker.docker` with `docker:docker`
|
||||
|
||||
\- Remove hardcoded UID/GID=1001 in `useradd/groupadd` to avoid collisions
|
||||
|
||||
\- `CPU_ARCH` is now runtime-detected; `aarch64` supported
|
||||
|
||||
\- `getopts` now handles unknown/missing-arg options; `-r/-m/-t` no longer implicitly enable Swarm
|
||||
|
||||
\- Strong validation of Manager IP and Token for Swarm worker role
|
||||
|
||||
\- `only_install_docker_compose` skips restart/info when Docker Engine isn't running
|
||||
|
||||
\### v2.0.0
|
||||
|
||||
\- Logging refactor, `set -euo pipefail`, interactive confirmations
|
||||
|
||||
\### v1.3.x / v1.2.x / v1.1.x
|
||||
|
||||
\- See git history
|
||||
|
||||
\## 👤 Author
|
||||
|
||||
|
||||
|
||||
+73
-19
@@ -2,7 +2,7 @@
|
||||
|
||||
|
||||
|
||||
\[!\[Version](https://img.shields.io/badge/version-2.0.0-blue.svg)](https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/docker-tools)
|
||||
\[!\[Version](https://img.shields.io/badge/version-2.1.0-blue.svg)](https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/docker-tools)
|
||||
|
||||
\[!\[License](https://img.shields.io/badge/license-GNU-green.svg)](https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/LICENSE)
|
||||
|
||||
@@ -160,9 +160,9 @@ cd shell\_tools/docker-tools
|
||||
|
||||
\# 方法 2: 直接ダウンロード
|
||||
|
||||
wget https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/releases/docker-tools\_v2.0.0.zip
|
||||
wget https://git.hty1024.com/HTY1024/shell\_tools/src/branch/main/releases/docker-tools\_v2.1.0.zip
|
||||
|
||||
unzip docker-tools\_v2.0.0.zip
|
||||
unzip docker-tools\_v2.1.0.zip
|
||||
|
||||
```
|
||||
|
||||
@@ -194,7 +194,7 @@ sudo ./docker-tools.sh install
|
||||
|
||||
\# またはバージョンを指定
|
||||
|
||||
sudo ./docker-tools.sh -v 29.1.4 -c v5.0.1 install
|
||||
sudo ./docker-tools.sh -v 29.4.1 -c v5.1.3 install
|
||||
|
||||
```
|
||||
|
||||
@@ -240,7 +240,7 @@ docker info
|
||||
|
||||
```bash
|
||||
|
||||
\# デフォルトインストール (Docker 29.1.4 + Compose v5.0.1)
|
||||
\# デフォルトインストール (Docker 29.4.1 + Compose v5.1.3)
|
||||
|
||||
sudo ./docker-tools.sh install
|
||||
|
||||
@@ -248,7 +248,7 @@ sudo ./docker-tools.sh install
|
||||
|
||||
\# バージョン指定
|
||||
|
||||
sudo ./docker-tools.sh -v 29.1.4 -c v5.0.1 install
|
||||
sudo ./docker-tools.sh -v 29.4.1 -c v5.1.3 install
|
||||
|
||||
|
||||
|
||||
@@ -280,13 +280,13 @@ sudo ./docker-tools.sh -i /data/docker/bin -d /data/docker/data install
|
||||
|
||||
\# Docker Engine のダウンロード
|
||||
|
||||
wget https://download.docker.com/linux/static/stable/x86\_64/docker-29.1.4.tgz
|
||||
wget https://download.docker.com/linux/static/stable/x86\_64/docker-29.4.1.tgz
|
||||
|
||||
|
||||
|
||||
\# Docker Compose のダウンロード
|
||||
|
||||
wget https://github.com/docker/compose/releases/download/v5.0.1/docker-compose-linux-x86\_64
|
||||
wget https://github.com/docker/compose/releases/download/v5.1.3/docker-compose-linux-x86\_64
|
||||
|
||||
```
|
||||
|
||||
@@ -300,7 +300,7 @@ wget https://github.com/docker/compose/releases/download/v5.0.1/docker-compose-l
|
||||
|
||||
\# パッケージとスクリプトを同じディレクトリにアップロード
|
||||
|
||||
scp docker-29.1.4.tgz docker-compose-linux-x86\_64 docker-tools.sh user@server:/path/to/dir/
|
||||
scp docker-29.4.1.tgz docker-compose-linux-x86\_64 docker-tools.sh user@server:/path/to/dir/
|
||||
|
||||
```
|
||||
|
||||
@@ -312,7 +312,7 @@ scp docker-29.1.4.tgz docker-compose-linux-x86\_64 docker-tools.sh user@server:/
|
||||
|
||||
```bash
|
||||
|
||||
sudo ./docker-tools.sh -p docker-29.1.4.tgz -n docker-compose-linux-x86\_64 install
|
||||
sudo ./docker-tools.sh -p docker-29.4.1.tgz -n docker-compose-linux-x86\_64 install
|
||||
|
||||
```
|
||||
|
||||
@@ -478,7 +478,7 @@ sudo ./docker-tools.sh \\
|
||||
|
||||
sudo ./docker-tools.sh \\
|
||||
|
||||
-p docker-29.1.4.tgz \\
|
||||
-p docker-29.4.1.tgz \\
|
||||
|
||||
-n docker-compose-linux-x86\_64 \\
|
||||
|
||||
@@ -548,13 +548,13 @@ sudo ./docker-tools.sh \\
|
||||
|
||||
\# 指定バージョンへのオンライン更新
|
||||
|
||||
sudo ./docker-tools.sh -v 29.1.4 update
|
||||
sudo ./docker-tools.sh -v 29.4.1 update
|
||||
|
||||
|
||||
|
||||
\# オフライン更新
|
||||
|
||||
sudo ./docker-tools.sh -p docker-29.1.4.tgz update
|
||||
sudo ./docker-tools.sh -p docker-29.4.1.tgz update
|
||||
|
||||
```
|
||||
|
||||
@@ -572,15 +572,15 @@ sudo ./docker-tools.sh -p docker-29.1.4.tgz update
|
||||
|
||||
|-----------|------|-----------|-----|
|
||||
|
||||
| `-v` | Docker Engine バージョン | 29.1.4 | `-v 28.2.1` |
|
||||
| `-v` | Docker Engine バージョン | 29.4.1 | `-v 28.2.1` |
|
||||
|
||||
| `-i` | Docker インストールディレクトリ | /opt/docker/bin | `-i /data/docker/bin` |
|
||||
|
||||
| `-d` | Docker データディレクトリ | /opt/docker/data | `-d /data/docker/data` |
|
||||
|
||||
| `-p` | Docker Engine パッケージ名 (オフライン) | - | `-p docker-29.1.4.tgz` |
|
||||
| `-p` | Docker Engine パッケージ名 (オフライン) | - | `-p docker-29.4.1.tgz` |
|
||||
|
||||
| `-c` | Docker Compose バージョン | v5.0.1 | `-c v2.36.2` |
|
||||
| `-c` | Docker Compose バージョン | v5.1.3 | `-c v2.36.2` |
|
||||
|
||||
| `-n` | Docker Compose パッケージ名 (オフライン) | - | `-n docker-compose-linux-x86\_64` |
|
||||
|
||||
@@ -616,7 +616,7 @@ vim docker-tools.sh
|
||||
|
||||
\# これらの変数を変更
|
||||
|
||||
DOCKER\_VERSION=29.1.4 # Docker バージョン
|
||||
DOCKER\_VERSION=29.4.1 # Docker バージョン
|
||||
|
||||
DOCKER\_INSTALL\_DIR=/opt/docker/bin # インストールディレクトリ
|
||||
|
||||
@@ -806,7 +806,7 @@ ls -lh docker-\*.tgz docker-compose-\*
|
||||
|
||||
\# 正しいファイル名を確認
|
||||
|
||||
./docker-tools.sh -p docker-29.1.4.tgz -n docker-compose-linux-x86\_64 install
|
||||
./docker-tools.sh -p docker-29.4.1.tgz -n docker-compose-linux-x86\_64 install
|
||||
|
||||
```
|
||||
|
||||
@@ -934,7 +934,7 @@ sudo rm -rf /tmp/docker-\*
|
||||
|
||||
\# 再インストール
|
||||
|
||||
sudo ./docker-tools.sh -v 29.1.4 install
|
||||
sudo ./docker-tools.sh -v 29.4.1 install
|
||||
|
||||
```
|
||||
|
||||
@@ -1216,6 +1216,60 @@ docker run -d \\
|
||||
|
||||
|
||||
|
||||
\## 📝 変更履歴
|
||||
|
||||
\### v2.1.0 (2026-04-24)
|
||||
|
||||
\#### 🆕 バージョン更新
|
||||
|
||||
\- デフォルト Docker Engine を \*\*29.4.1\*\* に更新
|
||||
|
||||
\- デフォルト Docker Compose を \*\*v5.1.3\*\* に更新
|
||||
|
||||
\#### 🐛 バグ修正
|
||||
|
||||
\- サブコマンド分岐の修正:`case "$@"` が複数引数で一致しない問題、`info` が `info_docker` を呼べていなかった問題
|
||||
|
||||
\- `check_net` の TIMEOUT 位置パラメータ誤用および 2xx/3xx を失敗扱いにしていた不具合を修正
|
||||
|
||||
\- `backup_file` がディレクトリに対して機能せず、アップグレード時にバックアップされていなかった問題を修正
|
||||
|
||||
\- `remove_env` が sed で残す空行を、範囲削除に切り替え
|
||||
|
||||
\- `docker.service` のコメントと `ExecStart=` が同一行に残っていた残骸を修正
|
||||
|
||||
\- スペルミスを修正(Dokcer / Coimpose / Conpose)
|
||||
|
||||
\#### ✨ 堅牢性向上
|
||||
|
||||
\- `config_env` を冪等化:再インストール時に `~/.bashrc`・`/etc/profile` への重複追記を回避
|
||||
|
||||
\- スクリプト内で `source ~/.bashrc` を実行しないように変更(`set -u` 時の外部 rc による中断を防止)
|
||||
|
||||
\- `daemon.json` のテンプレート置換後に `{{...}}` の残留を検証
|
||||
|
||||
\- データディレクトリは owner のみ変更し、`chmod -R 755` によるイメージレイヤ権限破壊を回避
|
||||
|
||||
\- 非推奨の `chown docker.docker` を `docker:docker` に更新
|
||||
|
||||
\- `useradd/groupadd` のハードコード UID/GID=1001 を削除し衝突を防止
|
||||
|
||||
\- `CPU_ARCH` をランタイム検出に変更、`aarch64` をサポート
|
||||
|
||||
\- `getopts` に不明オプション / 引数欠落の分岐を追加。`-r/-m/-t` は Swarm を暗黙に有効化しない
|
||||
|
||||
\- Swarm worker 役割での Manager IP と Token の強制バリデーション
|
||||
|
||||
\- `only_install_docker_compose` は Docker Engine 未稼働時に restart/info をスキップ
|
||||
|
||||
\### v2.0.0
|
||||
|
||||
\- ロギングの再構築、`set -euo pipefail` の導入、インタラクティブ確認
|
||||
|
||||
\### v1.3.x / v1.2.x / v1.1.x
|
||||
|
||||
\- Git 履歴を参照
|
||||
|
||||
\## 👤 著者
|
||||
|
||||
|
||||
|
||||
+166
-125
@@ -5,12 +5,12 @@ set -euo pipefail
|
||||
|
||||
# 参数配置
|
||||
## 版本号
|
||||
VERSION=2.0.0
|
||||
VERSION=2.1.0
|
||||
## 当前的日期、日期时间
|
||||
DATE="$(date '+%Y%m%d')"
|
||||
DATETIME="$(date '+%Y%m%d_%H%M%S')"
|
||||
## 服务器 CPU 架构
|
||||
CPU_ARCH=x86_64
|
||||
## 服务器 CPU 架构(运行时自动探测,见 check_cpu_arch)
|
||||
CPU_ARCH=""
|
||||
## 系统配置文件目录
|
||||
SYSTEMD_DIR=/usr/lib/systemd/system
|
||||
## Docker 安装目录
|
||||
@@ -22,15 +22,15 @@ NEED_OFFLINE_INSTALL=true
|
||||
## 是否安装 Docker Engine
|
||||
NEED_INSTALL_ENGINE=true
|
||||
## Docker 版本号
|
||||
DOCKER_VERSION=29.1.4
|
||||
DOCKER_VERSION=29.4.1
|
||||
## Docker 安装包下载地址(在线安装时使用)
|
||||
DOCKER_PACKAGE_URL=https://download.docker.com/linux/static/stable
|
||||
## Docker 安装包名称(离线安装时使用)
|
||||
DOCKER_PACKAGE_NAME=docker-29.1.4.tgz
|
||||
DOCKER_PACKAGE_NAME=docker-29.4.1.tgz
|
||||
## 是否安装 Docker Compose
|
||||
NEED_INSTALL_COMPOSE=true
|
||||
## Docker Compose 版本号
|
||||
DOCKER_COMPOSE_VERSION=v5.0.1
|
||||
DOCKER_COMPOSE_VERSION=v5.1.3
|
||||
## Docker Compose 安装包下载地址(在线安装时使用)
|
||||
DOCKER_COMPOSE_PACKAGE_URL=https://github.com/docker/compose/releases/download
|
||||
## Docker Compose 安装包名称(离线安装时使用)
|
||||
@@ -91,14 +91,19 @@ log_success () {
|
||||
echo -e "${COLOR_BOLD_GREEN}[INFO]${COLOR_RESET} [$(date '+%Y-%m-%d %H:%M:%S')] ${COLOR_GREEN}$* ${COLOR_RESET}"
|
||||
}
|
||||
|
||||
## 备份文件
|
||||
## 备份文件或目录
|
||||
backup_file () {
|
||||
local file="$1"
|
||||
local backup="${file}.bak.$(date '+%Y%m%d_%H%M%S')"
|
||||
|
||||
if [[ -f "$file" ]]; then
|
||||
cp -rpf "$file" "$backup" || log_warning "备份 $file 失败"
|
||||
log_info "已备份: $file -> $backup"
|
||||
local src="$1"
|
||||
local backup="${src}.bak.$(date '+%Y%m%d_%H%M%S')"
|
||||
|
||||
# 时间戳到秒,若 1 秒内连续调用则追加进程号避免覆盖
|
||||
if [[ -e "$backup" ]]; then
|
||||
backup="${backup}.$$"
|
||||
fi
|
||||
|
||||
if [[ -e "$src" ]]; then
|
||||
cp -rpf "$src" "$backup" || log_warning "备份 $src 失败"
|
||||
log_info "已备份: $src -> $backup"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -126,10 +131,15 @@ check_root () {
|
||||
|
||||
## 检查 CPU 架构
|
||||
check_cpu_arch () {
|
||||
CPU_ARCH="$(arch)"
|
||||
if [[ ${CPU_ARCH} != "x86_64" ]]; then
|
||||
log_error "不支持的 CPU 架构!"
|
||||
fi
|
||||
CPU_ARCH="$(uname -m)"
|
||||
case "${CPU_ARCH}" in
|
||||
x86_64|aarch64)
|
||||
log_info "检测到 CPU 架构: ${CPU_ARCH}"
|
||||
;;
|
||||
*)
|
||||
log_error "不支持的 CPU 架构: ${CPU_ARCH}(仅支持 x86_64、aarch64)!"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
## 检查发行版
|
||||
@@ -207,6 +217,36 @@ check_file () {
|
||||
fi
|
||||
}
|
||||
|
||||
## 检查 URL 是否可达(通用)
|
||||
check_url_reachable () {
|
||||
local url="$1"
|
||||
local label="$2"
|
||||
local timeout="${3:-10}"
|
||||
local http_code
|
||||
|
||||
# 允许 curl 失败,自己根据返回码判断
|
||||
http_code=$(curl -sSL -o /dev/null -w "%{http_code}" --connect-timeout "${timeout}" --max-time $((timeout * 3)) "${url}" || echo "000")
|
||||
log_debug "${url} -> ${http_code}"
|
||||
|
||||
case "${http_code}" in
|
||||
2??|3??)
|
||||
return 0
|
||||
;;
|
||||
000)
|
||||
log_error "无法获取 ${label}: 网络不可达(连接失败)!"
|
||||
;;
|
||||
4??)
|
||||
log_error "无法获取 ${label}: 客户端错误(${http_code})!"
|
||||
;;
|
||||
5??)
|
||||
log_error "无法获取 ${label}: 服务器错误(${http_code})!"
|
||||
;;
|
||||
*)
|
||||
log_error "无法获取 ${label}: 未知响应码(${http_code})!"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
## 检查网络
|
||||
check_net () {
|
||||
# 在线安装时,检查是否能正常获取安装包
|
||||
@@ -218,22 +258,7 @@ check_net () {
|
||||
log_error "请在【 DOCKER_PACKAGE_URL 】中配置 Docker Engine 安装包下载路径!"
|
||||
fi
|
||||
|
||||
local URL="${DOCKER_PACKAGE_URL}"
|
||||
local TIMEOUT="${2:-10}"
|
||||
local HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout "$TIMEOUT" "$URL")
|
||||
log_debug $URL $HTTP_CODE
|
||||
case "$HTTP_CODE" in
|
||||
400|401|403|404|405)
|
||||
log_error "无法获取 Docker Engine 安装包: 客户端错误(4xx)!"
|
||||
;;
|
||||
500|502|503|504)
|
||||
log_error "无法获取 Docker Engine 安装包: 服务器错误(5xx)!"
|
||||
;;
|
||||
000)
|
||||
log_error "无法获取 Docker Engine 安装包: 无法连接!"
|
||||
;;
|
||||
esac
|
||||
|
||||
check_url_reachable "${DOCKER_PACKAGE_URL}/${CPU_ARCH}/docker-${DOCKER_VERSION}.tgz" "Docker Engine 安装包" 10
|
||||
|
||||
if [[ "${NEED_INSTALL_COMPOSE}" == true ]]; then
|
||||
if [[ -z "${DOCKER_COMPOSE_VERSION}" ]]; then
|
||||
@@ -243,23 +268,8 @@ check_net () {
|
||||
log_error "请在【 DOCKER_COMPOSE_PACKAGE_URL 】中配置 Docker Compose 安装包下载路径!"
|
||||
fi
|
||||
|
||||
URL="${DOCKER_COMPOSE_PACKAGE_URL}"
|
||||
TIMEOUT="${2:-10}"
|
||||
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout "$TIMEOUT" "$URL")
|
||||
log_debug $URL $HTTP_CODE
|
||||
case "$HTTP_CODE" in
|
||||
400|401|403|404|405)
|
||||
log_error "无法获取 Docker Compose 安装包: 客户端错误(4xx)!"
|
||||
;;
|
||||
500|502|503|504)
|
||||
log_error "无法获取 Docker Compose 安装包: 服务器错误(5xx)!"
|
||||
;;
|
||||
000)
|
||||
log_error "无法获取 Docker Compose 安装包: 无法连接!"
|
||||
;;
|
||||
esac
|
||||
check_url_reachable "${DOCKER_COMPOSE_PACKAGE_URL}/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-${CPU_ARCH}" "Docker Compose 安装包" 10
|
||||
fi
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -287,11 +297,11 @@ help () {
|
||||
echo -e ""
|
||||
echo -e "${COLOR_BOLD_GREEN}使用方式: docker-tools 参数 选项"
|
||||
echo -e "${COLOR_BOLD_BLUE}参数说明:"
|
||||
echo -e " ${COLOR_BLUE}-v: Docker 版本(可选,默认安装 28.2.1 版本)"
|
||||
echo -e " ${COLOR_BLUE}-v: Docker 版本(可选,默认安装 29.4.1 版本)"
|
||||
echo -e " ${COLOR_BLUE}-i: Docker 安装目录(可选,默认为 /opt/docker/bin)"
|
||||
echo -e " ${COLOR_BLUE}-d: Docker 数据目录(可选,默认为 /opt/docker/data)"
|
||||
echo -e " ${COLOR_BLUE}-p: Docker 安装包名称(可选,仅离线安装时使用,默认为在线安装)"
|
||||
echo -e " ${COLOR_BLUE}-c: Docker Compose 版本(可选,默认安装 v2.36.2 版本)"
|
||||
echo -e " ${COLOR_BLUE}-c: Docker Compose 版本(可选,默认安装 v5.1.3 版本)"
|
||||
echo -e " ${COLOR_BLUE}-n: Docker Compose 安装包名称(可选,仅离线安装时使用,默认为在线安装)"
|
||||
echo -e " ${COLOR_BLUE}-a: 仅安装 Docker Engine(可选,默认安装 Docker Engine 和 Docker Compose )"
|
||||
echo -e " ${COLOR_BLUE}-b: 仅安装 Docker Compose(可选,默认安装 Docker Engine 和 Docker Compose )"
|
||||
@@ -318,8 +328,8 @@ help () {
|
||||
echo -e " ${COLOR_GREEN}安装 Docker (使用自定义配置) : docker-tools -v 28.2.1 -i /data/docker/bin -d /data/docker/data -p docker-28.2.1.tgz -c v2.36.2 -n docker-compose-linux-x86_64 install"
|
||||
echo -e " ${COLOR_GREEN}安装 Docker (同时作为 manager 节点启用 Swarm) : docker-tools -s install"
|
||||
echo -e " ${COLOR_GREEN}安装 Docker (同时作为 worker 节点启用 Swarm) : docker-tools -s -r worker -m 192.168.0.100 -t 123456 install"
|
||||
echo -e " ${COLOR_GREEN}安装 Docker (仅安装 Docker Engine) : docker-tools -oe install"
|
||||
echo -e " ${COLOR_GREEN}安装 Docker (仅安装 Docker Compose) : docker-tools -oc install"
|
||||
echo -e " ${COLOR_GREEN}安装 Docker (仅安装 Docker Engine) : docker-tools -a install"
|
||||
echo -e " ${COLOR_GREEN}安装 Docker (仅安装 Docker Compose) : docker-tools -b install"
|
||||
echo -e " ${COLOR_GREEN}卸载 Docker (使用默认配置) : docker-tools uninstall"
|
||||
echo -e " ${COLOR_GREEN}卸载 Docker (使用自定义配置) : docker-tools -v 28.2.1 -i /data/docker/bin -d /data/docker/data -p docker-28.2.1.tgz -c v2.36.2 -n docker-compose-linux-x86_64 uninstall"
|
||||
echo -e " ${COLOR_GREEN}重启 Docker : docker-tools restart"
|
||||
@@ -330,15 +340,11 @@ help () {
|
||||
echo -e " ${COLOR_GREEN}查看 Docker 信息 : docker-tools info"
|
||||
}
|
||||
|
||||
## 查询 CPU 架构
|
||||
## 查询 CPU 架构(等价于 check_cpu_arch,保留向后兼容)
|
||||
search_cpu_arch () {
|
||||
log_info '------------------------------ 开始设置 CPU 架构... ------------------------------'
|
||||
|
||||
CPU_ARCH="$(arch)"
|
||||
|
||||
if [[ ${CPU_ARCH} != "x86_64" ]]; then
|
||||
log_error "不支持的 CPU 架构!"
|
||||
fi
|
||||
check_cpu_arch
|
||||
|
||||
log_info '------------------------------ CPU 架构设置完成! ------------------------------'
|
||||
}
|
||||
@@ -372,14 +378,15 @@ create_user () {
|
||||
if getent group docker >/dev/null 2>&1; then
|
||||
log_info "用户组 docker 已存在"
|
||||
else
|
||||
groupadd -r -g 1001 docker || log_error "创建用户组失败"
|
||||
# 不硬编码 GID,避免目标机 1001 被占用
|
||||
groupadd -r docker || log_error "创建用户组失败"
|
||||
fi
|
||||
|
||||
|
||||
if id docker >/dev/null 2>&1; then
|
||||
log_info "用户 docker 已存在"
|
||||
else
|
||||
useradd -r -g docker -u 1001 -d /home/docker -s /bin/bash docker || log_error "创建用户失败"
|
||||
fi
|
||||
useradd -r -g docker -d /home/docker -s /bin/bash docker || log_error "创建用户失败"
|
||||
fi
|
||||
|
||||
log_info '------------------------------ Docker 用户创建完成! ------------------------------'
|
||||
}
|
||||
@@ -482,7 +489,7 @@ install_docker_engine () {
|
||||
log_info '------------------------------ Docker Engine 安装完成! ------------------------------'
|
||||
}
|
||||
|
||||
## 备份当前 Docker Engine () {
|
||||
## 备份当前 Docker Engine
|
||||
backup_docker_engine () {
|
||||
log_info '------------------------------ 开始备份 Docker Engine... ------------------------------'
|
||||
|
||||
@@ -491,18 +498,18 @@ backup_docker_engine () {
|
||||
log_info '------------------------------ Docker Engine 备份完成! ------------------------------'
|
||||
}
|
||||
|
||||
## 安装 Dokcer Compose
|
||||
## 安装 Docker Compose
|
||||
install_docker_compose () {
|
||||
log_info '------------------------------ 开始安装 Docker Compose... ------------------------------'
|
||||
|
||||
cp -rpf ./"${DOCKER_COMPOSE_PACKAGE_NAME}" "${DOCKER_INSTALL_DIR}"/docker-compose
|
||||
chown docker.docker "${DOCKER_INSTALL_DIR}"/docker-compose
|
||||
chown docker:docker "${DOCKER_INSTALL_DIR}"/docker-compose
|
||||
chmod +x "${DOCKER_INSTALL_DIR}"/docker-compose
|
||||
|
||||
log_info '------------------------------ Docker Compose 安装完成! ------------------------------'
|
||||
}
|
||||
|
||||
## 备份当前 Docker Coimpose
|
||||
## 备份当前 Docker Compose
|
||||
backup_docker_compose () {
|
||||
log_info '------------------------------ 开始备份 Docker Compose... ------------------------------'
|
||||
|
||||
@@ -512,25 +519,35 @@ backup_docker_compose () {
|
||||
log_info '------------------------------ Docker Compose 备份完成! ------------------------------'
|
||||
}
|
||||
|
||||
## 写入环境变量段(幂等:若已存在则先删旧块再写新块)
|
||||
_write_env_block () {
|
||||
local target="$1"
|
||||
[[ -f "$target" ]] || touch "$target"
|
||||
|
||||
backup_file "$target"
|
||||
|
||||
# 幂等:若已有旧块先删除
|
||||
if grep -q '# Docker Env Begin' "$target"; then
|
||||
sed -i '/# Docker Env Begin/,/# Docker Env End/d' "$target"
|
||||
fi
|
||||
|
||||
cat >> "$target" <<EOF
|
||||
# Docker Env Begin
|
||||
export DOCKER_HOME=${DOCKER_INSTALL_DIR}
|
||||
export PATH=\$PATH:\$DOCKER_HOME
|
||||
# Docker Env End
|
||||
EOF
|
||||
}
|
||||
|
||||
## 配置环境变量
|
||||
config_env () {
|
||||
log_info '------------------------------ 开始配置环境变量... ------------------------------'
|
||||
|
||||
backup_file ~/.bashrc
|
||||
echo '# Docker Env Begin' >> ~/.bashrc
|
||||
echo 'export DOCKER_HOME='"${DOCKER_INSTALL_DIR}" >> ~/.bashrc
|
||||
echo 'export PATH=$PATH:$DOCKER_HOME' >> ~/.bashrc
|
||||
echo '# Docker Env End' >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
log_info '请手动执行【 source ~/.bashrc 】更新环境变量!'
|
||||
_write_env_block ~/.bashrc
|
||||
_write_env_block /etc/profile
|
||||
|
||||
backup_file /etc/profile
|
||||
echo '# Docker Env Begin' >> /etc/profile
|
||||
echo 'export DOCKER_HOME='"${DOCKER_INSTALL_DIR}" >> /etc/profile
|
||||
echo 'export PATH=$PATH:$DOCKER_HOME' >> /etc/profile
|
||||
echo '# Docker Env End' >> /etc/profile
|
||||
#source /etc/profile
|
||||
log_info '请手动执行【 source /etc/profile 】更新环境变量!'
|
||||
# 不在脚本中 source:set -u 下其它脚本的未定义变量会导致本脚本中止
|
||||
log_info '请手动执行【 source ~/.bashrc 】和【 source /etc/profile 】更新环境变量!'
|
||||
|
||||
log_info '------------------------------ 环境变量配置完成! ------------------------------'
|
||||
}
|
||||
@@ -539,21 +556,18 @@ config_env () {
|
||||
remove_env () {
|
||||
log_info '------------------------------ 开始移除环境变量... ------------------------------'
|
||||
|
||||
backup_file ~/.bashrc
|
||||
sed -i 's/# Docker Env Begin//g' ~/.bashrc
|
||||
sed -i 's#export DOCKER_HOME='"${DOCKER_INSTALL_DIR}"'##g' ~/.bashrc
|
||||
sed -i 's/export PATH=$PATH:$DOCKER_HOME//g' ~/.bashrc
|
||||
sed -i 's/# Docker Env End//g' ~/.bashrc
|
||||
source ~/.bashrc
|
||||
log_info '请手动执行 source ~/.bashrc 更新环境变量!'
|
||||
if [[ -f ~/.bashrc ]]; then
|
||||
backup_file ~/.bashrc
|
||||
# 范围删除:从 "# Docker Env Begin" 到 "# Docker Env End"(含首尾)
|
||||
sed -i '/# Docker Env Begin/,/# Docker Env End/d' ~/.bashrc
|
||||
log_info '请手动执行【 source ~/.bashrc 】更新环境变量!'
|
||||
fi
|
||||
|
||||
backup_file /etc/profile
|
||||
sed -i 's/# Docker Env Begin//g' /etc/profile
|
||||
sed -i 's#export DOCKER_HOME='"${DOCKER_INSTALL_DIR}"'##g' /etc/profile
|
||||
sed -i 's/export PATH=$PATH:$DOCKER_HOME//g' /etc/profile
|
||||
sed -i 's/# Docker Env End//g' /etc/profile
|
||||
#source /etc/profile
|
||||
log_info '请手动执行 source /etc/profile 更新环境变量!'
|
||||
if [[ -f /etc/profile ]]; then
|
||||
backup_file /etc/profile
|
||||
sed -i '/# Docker Env Begin/,/# Docker Env End/d' /etc/profile
|
||||
log_info '请手动执行【 source /etc/profile 】更新环境变量!'
|
||||
fi
|
||||
|
||||
log_info '------------------------------ 环境变量移除完成! ------------------------------'
|
||||
}
|
||||
@@ -581,7 +595,7 @@ remove_service () {
|
||||
log_info '------------------------------ 系统服务移除完成! ------------------------------'
|
||||
}
|
||||
|
||||
## 配置 Docker
|
||||
## 配置 Docker
|
||||
config_docker_engine () {
|
||||
log_info '------------------------------ 开始配置 Docker... ------------------------------'
|
||||
|
||||
@@ -590,15 +604,20 @@ config_docker_engine () {
|
||||
|
||||
if [[ "${NEED_ENABLE_DOCKER_SWARM}" == false ]]; then
|
||||
sed -i 's#{{DOCKER_LIVE_RESTORE}}#true#g' /etc/docker/daemon.json
|
||||
fi
|
||||
if [[ "${NEED_ENABLE_DOCKER_SWARM}" == true ]]; then
|
||||
else
|
||||
sed -i 's#{{DOCKER_LIVE_RESTORE}}#false#g' /etc/docker/daemon.json
|
||||
fi
|
||||
|
||||
chown -R docker.docker "${DOCKER_INSTALL_DIR}"
|
||||
# 校验模板占位符是否已全部替换,避免写入非法 JSON
|
||||
if grep -q '{{' /etc/docker/daemon.json; then
|
||||
log_error "/etc/docker/daemon.json 存在未替换的占位符,请检查模板!"
|
||||
fi
|
||||
|
||||
chown -R docker:docker "${DOCKER_INSTALL_DIR}"
|
||||
chmod -R 755 "${DOCKER_INSTALL_DIR}"
|
||||
chown -R docker.docker "${DOCKER_DATA_DIR}"
|
||||
chmod -R 755 "${DOCKER_DATA_DIR}"
|
||||
# 数据目录仅改 owner,不递归 chmod,避免破坏镜像层原有权限
|
||||
chown -R docker:docker "${DOCKER_DATA_DIR}"
|
||||
chmod 711 "${DOCKER_DATA_DIR}"
|
||||
|
||||
log_info '------------------------------ Docker 配置完成! ------------------------------'
|
||||
}
|
||||
@@ -645,7 +664,7 @@ disable_docker () {
|
||||
log_info '------------------------------ Docker 自启动取消完成! ------------------------------'
|
||||
}
|
||||
|
||||
## 查询 Dokcer 信息
|
||||
## 查询 Docker 信息
|
||||
info_docker () {
|
||||
log_info '------------------------------ 开始查询 Docker 信息... ------------------------------'
|
||||
|
||||
@@ -685,13 +704,19 @@ only_install_docker_compose () {
|
||||
download_docker_compose_package
|
||||
fi
|
||||
install_docker_compose
|
||||
restart_docker
|
||||
info_docker
|
||||
|
||||
log_info '------------------------------ Docker Conpose 安装完成! ------------------------------'
|
||||
# 仅当 docker 服务可用时才重启并查询 info
|
||||
if systemctl list-unit-files docker.service >/dev/null 2>&1 && systemctl is-active --quiet docker; then
|
||||
restart_docker
|
||||
info_docker
|
||||
else
|
||||
log_info 'Docker Engine 尚未安装或未运行,跳过 restart/info 步骤。'
|
||||
fi
|
||||
|
||||
log_info '------------------------------ Docker Compose 安装完成! ------------------------------'
|
||||
}
|
||||
|
||||
## 更新 Dokcer Engine
|
||||
## 更新 Docker Engine
|
||||
only_update_docker_engine () {
|
||||
log_info '------------------------------ 开始更新 Docker Engine... ------------------------------'
|
||||
|
||||
@@ -711,7 +736,7 @@ only_update_docker_engine () {
|
||||
log_info '------------------------------ Docker Engine 更新完成! ------------------------------'
|
||||
}
|
||||
|
||||
## 更新 Dokcer Compose
|
||||
## 更新 Docker Compose
|
||||
only_update_docker_compose () {
|
||||
log_info '------------------------------ 开始更新 Docker Compose... ------------------------------'
|
||||
|
||||
@@ -723,21 +748,24 @@ only_update_docker_compose () {
|
||||
restart_docker
|
||||
info_docker
|
||||
|
||||
log_info '------------------------------ Docker Conpose 更新完成! ------------------------------'
|
||||
log_info '------------------------------ Docker Compose 更新完成! ------------------------------'
|
||||
}
|
||||
|
||||
## 启用 Docker Swarm
|
||||
only_enable_docker_swarm () {
|
||||
log_info '------------------------------ 开始启用 Docker Swarm... ------------------------------'
|
||||
|
||||
sed -i 's#"live-restore": true#"live-restore": false#g' /etc/docker/daemon.json
|
||||
restart_docker
|
||||
|
||||
if [ "${DOCKER_SWARM_ROLE}" == "manager" ]; then
|
||||
docker swarm init --advertise-addr "${DOCKER_SWARM_MANAGER_IP}"
|
||||
if [[ -f /etc/docker/daemon.json ]]; then
|
||||
sed -i 's#"live-restore": true#"live-restore": false#g' /etc/docker/daemon.json
|
||||
restart_docker
|
||||
fi
|
||||
if [ "${DOCKER_SWARM_ROLE}" == "worker" ]; then
|
||||
|
||||
if [[ "${DOCKER_SWARM_ROLE}" == "manager" ]]; then
|
||||
docker swarm init --advertise-addr "${DOCKER_SWARM_MANAGER_IP}"
|
||||
elif [[ "${DOCKER_SWARM_ROLE}" == "worker" ]]; then
|
||||
docker swarm join --token "${DOCKER_SWARM_TOKEN}" "${DOCKER_SWARM_MANAGER_IP}":2377
|
||||
else
|
||||
log_error "未知 Swarm 角色: ${DOCKER_SWARM_ROLE}"
|
||||
fi
|
||||
|
||||
log_info '------------------------------ Docker Swarm 启用完成! ------------------------------'
|
||||
@@ -916,34 +944,47 @@ while getopts "v:i:d:p:c:n:r:m:t:abs" opt; do
|
||||
log_info '用户自定义: 启用 Docker Swarm'
|
||||
;;
|
||||
r)
|
||||
## 设置 Docker Swarm 角色
|
||||
## 设置 Docker Swarm 角色(不隐式开启 Swarm,需显式 -s)
|
||||
if [[ ${OPTARG} != "manager" && ${OPTARG} != "worker" ]]; then
|
||||
log_error '角色错误,可选择:manager、worker'
|
||||
fi
|
||||
NEED_ENABLE_DOCKER_SWARM=true
|
||||
DOCKER_SWARM_ROLE="${OPTARG}"
|
||||
log_info '用户自定义: Docker Swarm 角色('${OPTARG}')'
|
||||
log_info "用户自定义: Docker Swarm 角色(${OPTARG})"
|
||||
;;
|
||||
m)
|
||||
## 设置 Docker Swarm Manager IP
|
||||
NEED_ENABLE_DOCKER_SWARM=true
|
||||
## 设置 Docker Swarm Manager IP(不隐式开启 Swarm,需显式 -s)
|
||||
DOCKER_SWARM_MANAGER_IP="${OPTARG}"
|
||||
log_info '用户自定义: Docker Swarm Manager IP('${OPTARG}')'
|
||||
log_info "用户自定义: Docker Swarm Manager IP(${OPTARG})"
|
||||
;;
|
||||
t)
|
||||
## 设置 Docker Swarm Token
|
||||
NEED_ENABLE_DOCKER_SWARM=true
|
||||
## 设置 Docker Swarm Token(不隐式开启 Swarm,需显式 -s)
|
||||
DOCKER_SWARM_TOKEN="${OPTARG}"
|
||||
log_info '用户自定义: Docker Swarm Token('${OPTARG}')'
|
||||
log_info "用户自定义: Docker Swarm Token(******)"
|
||||
;;
|
||||
\?)
|
||||
log_error "未知选项: -${OPTARG}"
|
||||
;;
|
||||
:)
|
||||
log_error "选项 -${OPTARG} 缺少参数值!"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Swarm worker 角色强校验(避免使用默认示例值启动 join 失败)
|
||||
if [[ "${NEED_ENABLE_DOCKER_SWARM}" == true && "${DOCKER_SWARM_ROLE}" == "worker" ]]; then
|
||||
if [[ "${DOCKER_SWARM_MANAGER_IP}" == "127.0.0.1" ]]; then
|
||||
log_error "worker 角色必须通过 -m 指定 manager 节点真实 IP!"
|
||||
fi
|
||||
if [[ -z "${DOCKER_SWARM_TOKEN}" || "${DOCKER_SWARM_TOKEN}" == "123456" ]]; then
|
||||
log_error "worker 角色必须通过 -t 指定有效 Swarm Token(默认占位 123456 不可用)!"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 移除已经使用的参数
|
||||
shift $((OPTIND-1))
|
||||
|
||||
# 根据参数执行方法
|
||||
case "$@" in
|
||||
case "${1:-help}" in
|
||||
help)
|
||||
help
|
||||
;;
|
||||
@@ -960,7 +1001,7 @@ case "$@" in
|
||||
update
|
||||
;;
|
||||
info)
|
||||
info
|
||||
info_docker
|
||||
;;
|
||||
start)
|
||||
start_docker
|
||||
|
||||
@@ -10,7 +10,7 @@ Type=notify
|
||||
Environment=PATH={{DOCKER_BIN_DIR}}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
# the default is not to use systemd for cgroups because the delegate issues still
|
||||
# exists and systemd currently does not support the cgroup feature set required
|
||||
# for containers run by dockerExecStart={{DOCKER_BIN_DIR}}/dockerd -H unix://var/run/docker.sock
|
||||
# for containers run by docker
|
||||
ExecStart={{DOCKER_BIN_DIR}}/dockerd -H unix://var/run/docker.sock
|
||||
# Having non-zero Limit*s causes performance problems due to accounting overhead
|
||||
# in the kernel. We recommend using cgroups to do container-local accounting.
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user