起因,DSM 7.x 版只要重啟開機後,原啟動正常 Docker 容器在網址與 Port 號,會回應出 404 與錯誤訊息
升上 DSM 7.x 版後,近日來發現一個問題,原在 DSM 6 使用的 Docker 服務,確因為有設定關關機排程後,原有設定好的網址對應服務,確出現 404 與錯誤訊息。
以 youtube-dl-server 使用容器為例,會因為系統啟動後,將外接 USB 碟的儲存空間,因為找不到路徑而產生錯誤回應,因此服務自然無法運行。
因為這個錯誤與問題,將整個主機啟動系統的過程與設定調整,發現到只要是重開機進入到 DSM 7 的系統後,原本先前因關機前運行動正常的 Docker 容器服務,在系統重啟後顯示正常運行的綠燈,但在到 Web Station 套件的網頁入口查看後,狀態顯示正常但點按連結後確被導向 404,容器的 Port 號對向 Web Station 對外所自訂的 Port 號的連結過程中,向是出現了問題,反覆對應不同設定後問題還是一樣,都會連向 404 回應頁。
SSH 連結主機與 Docker 基本指令
因為還是會使用到服務,會每次都要去 container manager 套件中手動先關閉後再啟動容器。
手動的動啟很麻煩,思考處理方式整理如下。
登入 synology SSH 連線,登入帳號名稱為預設 admin,輸入後接著需要再輸入密碼。
1 | ssh admin@<Nas IP> |
切換到最高權全 root 身分,在次輸入密碼之後終端機開頭就會是 root@<NasName>。
1 | sudo -i |
查容器資訊,會印出容器對應 id 與名稱等資訊,這裡接著會用容器名稱處理。
1 | docker ps -a |
要啟動單一的容器服務名稱 kmb32123-youtube-dl-server,使用的指令如下。
1 2 3 4 5 6 7 8 | # 容器啟動 kmb32123-youtube-dl-server # docker container <start/stop> <container-name> # start 啟動 docker container start kmb32123-youtube-dl-server # stop 停用 docker container stop kmb32123-youtube-dl-server |
一次操作多個容器名稱,例如 kmb32123-youtube-dl-server 加上 jellyfin-jellyfin 二個服務,指令如下。
1 2 3 | # docker container <start/stop> <container-name-1> <container-name-2> docker container stop kmb32123-youtube-dl-server jellyfin-jellyfin |
在終端機以 SSH 連上主機後,所操作 Docker 的指令大約如此。
如果會要在一段指令後,執行關閉容器後接著重新開啟容器,可以使用 && 邏輯運算子連接,意指 stop 指令執行完成後,接著執行 start。
1 docker container stop kmb32123-youtube-dl-server jellyfin-jellyfin && docker container start kmb32123-youtube-dl-server jellyfin-jellyfin
DSM 7 設定任務排程:開關機觸發自定義指令
前往 DSM 控製台 > 任務排程表,點按新增收閤選單下的觸發任務 > 使用者自定義指令碼。
針對開機或是關機事件,指令任務名稱,會需要特別設定使用者帳號,以 root 的權限執行設定。
開關機執行完成時,會觸發執行下面的自定義指令,在輸入框中輸入指令。
關機執行自定義指令如下。
1 | sudo -i docker container stop jellyfin-jellyfin kmb32123-youtube-dl-server |
1 | sleep 90; sudo -i docker container start jellyfin-jellyfin kmb32123-youtube-dl-server |
指令片段說明如下:
- sudo -i:以超級使用者的權限 root 執行指令。
- sleep 90;:以延遲 90秒 的方式執行,運行後會等待 90 秒後才會執行後面的指令。