如何自動化容器的停止與啟動?

我正在使用 Portainer 管理 Docker 容器,並且已經部署了一個名為 XYZ 的堆疊(包含 4 個容器)。我需要對整個堆疊進行備份,並且在備份期間需要將整個堆疊停止。請問要如何自動化停止和啟動整個堆疊的流程?

謝謝 :slight_smile:

由於我使用 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。

希望這對有需要的人有所幫助。 :slight_smile:

1個讚

我也找到了一篇關於自動啟動容器的文章。

1個讚