NAS使用—更新Docker容器

关于Docker容器的更新。据说群辉的新版Container Manager自带更新功能。在旧版容器后面会显示【更新】,实现了一键更新。但是我折腾了老半天也没看到这个功能。只能使用最原始的方式更新。

下面以Jeckett的更新为例,详细讲解一下操作步骤

一、登录NAS

以macOS为例,打开终端,通过ssh登录NAS

#比如192.168.0.1是NAS的本地IP,Tony是用户名
ssh Tony@192.168.0.1 -p 2222 
#输入密码,登录成功后切换root (密码一样)
sudo -i 

查看Docker版本

docker --version

如果能看到 Docker 版本,说明已安装。

Synology NAS 高版本 DSM 自带 Docker(部分型号除外)。

QNAP 需要安装 Container Station,或者在 Linux 模式下直接安装 Docker。

二、 安装 docker-compose

docker-compose 是 Docker 官方提供的一个容器编排工具,它可以帮助你用一个配置文件(通常叫 docker-compose.yml)来定义和管理多个 Docker 容器。不需要每次都手动写一长串 docker run ... 参数。

常用命令

  • docker-compose up -d → 后台启动所有服务 (如果容器不存在则根据配置信息创建,有则直接启动, 配置有变动会停止旧容器并创建新容器,配置数据不会丢失)
  • docker-compose down → 停止并删除容器
  • docker-compose ps → 查看运行中的服务
  • docker-compose logs -f → 查看日志
  • docker-compose restart → 重启服务

方法 1:使用 Python pip 安装

# 安装 pip(如果 NAS 没有 Python)
sudo apt update
sudo apt install python3-pip -y

# 安装 docker-compose
sudo pip3 install docker-compose
  • 安装完成后检查:
docker-compose --version

方法 2:直接下载二进制文件(推荐)

docker-compose 本身就是一个独立可执行文件,不依赖 pip。

  1. 在本机下载:
   curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o docker-compose

这会下载一个 docker-compose 可执行文件。

  1. 通过群晖 File Station 上传到 NAS,比如放到 /volume1/Download
   cd /volume1/Download
   sudo mv docker-compose /usr/local/bin/docker-compose
   #给执行权限
   sudo chmod +x /usr/local/bin/docker-compose
  1. 测试:
   docker-compose --version

三、编写docker-compose.yml

docker-compose.yml包含了容器的端口映射、卷挂载、环境变量等信息。一个docker-compose.yml可以包含多个容器的配置信息。后续将可以通过一行命令更新全部容器。

下面是一个jackett的 docker-compose.yml 文件例子:

version: "3.9"
services:
  jackett:
    image: ghcr.io/linuxserver/jackett:latest
    container_name: jackett
    environment:
      - PUID=1026         # 替换成你 NAS 用户的 PUID
      - PGID=100          # 替换成你 NAS 用户的 PGID
      - TZ=Asia/Shanghai
    volumes:
      - $CONFIG_DIR:/config
    ports:
      - 9117:9117
    restart: unless-stopped

如果你希望配置信息和旧版本完全一致,可以通过Container Manager查看容器设置信息

将写好的docker-compose.yml放置到容器根目录,比如/volume1/docker/jackett

然后在 SSH 里执行:

cd /volume1/docker/jackett
docker-compose up -d

以上步骤可以通过一个完整的 脚本一步执行:

#!/bin/bash

# ==========================================
# 脚本功能:
#  安装 docker-compose(官方二进制)
#  备份现有 Jackett 配置
#  拉取最新 Jackett 镜像并用 docker-compose 启动
# ==========================================

# ==== 1. 安装 docker-compose ====
echo "安装 docker-compose..."
COMPOSE_VERSION="2.25.0"
DEST="/usr/local/bin/docker-compose"

# 检查是否已安装
if command -v docker-compose &>/dev/null; then
    echo "docker-compose 已安装,版本:$(docker-compose --version)"
else
    sudo curl -L "https://github.com/docker/compose/releases/download/v${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o $DEST
    sudo chmod +x $DEST
    echo "docker-compose 安装完成,版本:$(docker-compose --version)"
fi

# ==== 2. 备份 Jackett 配置 ====
CONFIG_DIR="/volume1/docker/jackett"
BACKUP_DIR="/volume1/backup/jackett_$(date +%Y%m%d_%H%M%S)"

if [ -d "$CONFIG_DIR" ]; then
    echo "备份 Jackett 配置..."
    mkdir -p "$BACKUP_DIR"
    cp -r "$CONFIG_DIR"/* "$BACKUP_DIR"/
    echo "备份完成 -> $BACKUP_DIR"
else
    echo "未找到 Jackett 配置目录:$CONFIG_DIR,跳过备份"
fi

# ==== 3. 创建 docker-compose.yml ====
COMPOSE_FILE="/volume1/docker/jackett/docker-compose.yml"

echo "创建 docker-compose.yml..."
mkdir -p "$(dirname "$COMPOSE_FILE")"

cat > "$COMPOSE_FILE" <<EOL
version: "3.9"

services:
  jackett:
    image: ghcr.io/linuxserver/jackett:latest
    container_name: jackett
    environment:
      - PUID=1026         # 替换成你 NAS 用户的 PUID
      - PGID=100          # 替换成你 NAS 用户的 PGID
      - TZ=Asia/Shanghai
    volumes:
      - $CONFIG_DIR:/config
    ports:
      - 9117:9117
    restart: unless-stopped
EOL

echo "docker-compose.yml 已创建"

# ==== 4. 停止旧容器并启动新容器 ====
echo "升级 Jackett..."
cd "$(dirname "$COMPOSE_FILE")"

# 停止并删除旧容器(保留配置)
docker-compose down

# 拉取最新镜像并启动
docker-compose pull
docker-compose up -d

echo "Jackett 升级完成"

将脚本保存为 upgrade_jackett.sh,可以放置在NAS的任何位置

  1. 通过 SSH 登录 NAS,进入脚本目录。
  2. 给脚本执行权限:chmod +x upgrade_jackett.sh
  3. 执行脚本:./upgrade_jackett.sh
  4. 完成后打开浏览器访问: http://192.168.0.1:9117

四、常见问题

NAS无法访问dockerHub
正常访问

解决方法 1:设置NAS代理

  1. 电脑端打开Clash,并设置允许局域网连接
  2. 群辉设置代理连接,地址填写电脑的本地IP,端口写clash默认的7890
代理设置

解决方法2:docker安装clash

  1. 通过ssh安装clash
  2. 安装yacd,通过网页端界面设置clash的系统代理,把HTTP/HTTPS代理指向127.0.0.1:7890

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注