我正在使用 Portainer 管理 Docker 容器,並且已經部署了一個名為 XYZ 的堆疊(包含 4 個容器)。我需要對整個堆疊進行備份,並且在備份期間需要將整個堆疊停止。請問要如何自動化停止和啟動整個堆疊的流程?
謝謝 ![]()
我正在使用 Portainer 管理 Docker 容器,並且已經部署了一個名為 XYZ 的堆疊(包含 4 個容器)。我需要對整個堆疊進行備份,並且在備份期間需要將整個堆疊停止。請問要如何自動化停止和啟動整個堆疊的流程?
謝謝 ![]()
由於我使用 Portainer Community Edition 來管理我的容器,但找不到任何有用的功能,所以我只好將 Immich 從 Portainer 移除,並在 Qnap Container Station 重新部署。其餘流程則是透過 shell 腳本和 Qnap 儲存快照來完成。這些腳本會透過 crontab 排程執行。以下是腳本及相關步驟:
1. 建立停止 Immich stack 的腳本:
#!/bin/bash
#
# 停止容器以進行 QNAP 快照
#
# 設定 PATH 以找到 QNAP docker 執行檔
export PATH=/share/ZFS530_DATA/.qpkg/container-station/bin:$PATH
export HOME=/root
# 可選:使用完整路徑以確保正確
DOCKER_BIN=/share/ZFS530_DATA/.qpkg/container-station/bin/docker
# 停止所有 Immich 容器
$DOCKER_BIN stop $($DOCKER_BIN ps -q --filter "name=Immich")
2. 建立啟動 Immich stack 的腳本:
#!/bin/bash
#
# 停止容器以進行 QNAP 快照
#
# 設定 PATH 以找到 QNAP docker 執行檔
export PATH=/share/ZFS530_DATA/.qpkg/container-station/bin:$PATH
export HOME=/root
# 可選:使用完整路徑以確保正確
DOCKER_BIN=/share/ZFS530_DATA/.qpkg/container-station/bin/docker
# 啟動所有 Immich 容器
$DOCKER_BIN start $($DOCKER_BIN ps -a -q --filter "name=Immich")
如果你需要將 bridge 網路加入 Immich-Server 容器,使其能夠透過 Cloudflare 存取,請在啟動腳本底部加入以下內容:
# 等待 30 秒
sleep 30
# 將 bridge 網路加入 Immich-Server 容器
$DOCKER_BIN network connect bridge Immich-Server
3. 為停止與啟動腳本建立 crontab 排程:
0 1 * * * /bin/sh /share/Scripts/Qnap/stop_containers.sh >> /share/Scripts/Logs/crontab_stop_container.log 2>&1
5 1 * * * /bin/sh /share/Scripts/Qnap/start_containers.sh >> /share/Scripts/Logs/crontab_start_container.log 2>&1
4. 建立與 crontab 中啟動/停止腳本時間相符的排程快照
可選: 將你的快照複製到另一台 NAS。
希望這對有需要的人有所幫助。 ![]()
我也找到了一篇關於自動啟動容器的文章。