大家好,
我有一個支援應用程式 SimpleHelp,目前在 Container Station 的 Docker 容器中運行。運作非常順利,但我遇到了一個問題。當 SimpleHelp 軟體有新版本推出時,我無法更新它。當然,我可以每次都建立一個新容器,但每次都要重新建立所有偏好設定,這樣很麻煩。
我希望能夠存取容器內的檔案,或是將容器設置成可以使用我 NAS 上的目錄。我一直在嘗試透過建立 volume(卷)來達成這個目的,但操作過程並不清楚,而且我一直遇到困難,因為在建立 volume 時需要輸入容器名稱,而我輸入的每個容器名稱都被視為無效路徑,所以我卡住了。
肯定有方法可以做到這一點,所以我在這裡詢問大家。
謝謝!
你可以使用 compose 檔案來設置,並將設定和資料儲存在 NAS 上的永久資料夾中
例如:
謝謝,但老實說我完全不知道該怎麼做!我對 Docker 完全是新手,也不知道怎麼寫 compose 腳本……
我應該要加在這裡嗎?
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /opt/appdata/simplehelp/configuration:/opt/SimpleHelp/configuration
那我可以直接用 QNAP 標準路徑指向資料夾嗎?上面那些路徑都是容器內部的本地路徑——對嗎?那我要怎麼指定容器外部的路徑呢?
OK。所以需要像這樣嗎:
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /opt/appdata/simplehelp/configuration:/share/Container/SimpleHelp
這樣對嗎?
應該是相反的順序……先寫本地掛載的位置,再寫容器內部的位置
- /share/Container/SimpleHelp:/opt/appdata/simplehelp/configuration
好的。我需要在它後面加上 :rw,還是寫 read/write,還是直接保持原樣?
你可以……我認為預設是 rw,而 ro 是由那個旗標設定的。
例如,你可以將 Plex 媒體資料夾設為 ro,這樣即使容器遭到惡意軟體感染,也無法刪除你的媒體檔案。
好的,謝謝。我會試試看。
那麼,有沒有辦法從 NAS 讀取現有的容器檔案?我一直沒能搞清楚。是不可能嗎?
您可以透過 WinSCP(方便的圖形介面)瀏覽已建立的磁碟區,只需前往此處顯示的位置
是的,我目前的容器沒有任何卷。我只是用精靈從倉庫建立了它。
在 File Station 中,我可以進入:
/Container/container-station-data/lib/docker/containers/aa5528825f8a5980c5caffbc046d9057ee10f0fadea6a932697fb5fac51ce90c
但裡面沒有什麼有用的東西。那我需要用 WinSCP 嗎?
嗯……你可以嘗試新增一個容器的 SSH 會話,然後直接連接到容器(也可以透過 SSH 連接,應該可行)。
我可以進入容器的主控台,但我不知道怎麼離開容器到外部…
好的。我做錯了什麼。我拿了 YML 檔案並修改它,按照我們討論的方式新增了本地卷來儲存資料。我在 ContainerStation 中將它建立為一個應用程式。但沒有任何應用程式顯示出來。不過我在映像檔中看到另一個 Docker 映像檔。所以我安裝並啟動了它,但我在 NAS 上為儲存資料所建立的資料夾裡什麼都沒有。
我下載了你使用的相同 Docker 映像,預設安裝包含了 3 個 NAT 端口映射
SSH
HTTP
HTTPS
試試看能否透過那個連接 SSH
很遺憾,沒有。連線被拒絕了。我可以使用 SimpleHelp 管理員應用程式來備份我的伺服器資料。所以如果我現在能夠把這些資料儲存到我的 NAS 上的一個可存取的資料夾裡,我應該就能從備份恢復。不過我用 YML 檔案的嘗試似乎沒有成功。所以我們來專注於這個部分吧……
看起來應用程式沒有被建立:
無法建立應用程式「simplehelp」。錯誤訊息:operateApp 操作 [--project-name simplehelp up -d --remove-orphans] 失敗:退出狀態 1:time="2025-03-27T12:19:37-05:00" level=warning msg="/share/CACHEDEV2_DATA/.qpkg/container-station/data/application/simplehelp/docker-compose.yml: 屬性version 已過時,將被忽略,請移除以避免潛在混淆" network frontbridge 宣告為 external,但找不到
version: "3.2"
services:
#SimpleHelp 容器
simplehelp:
image: tecneo/simplehelp
container_name : simplehelp
ports:
- "8680:80"
- "8681:80/udp"
- "8643:443"
- "8643:443/udp"
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /share/Container/SimpleHelp/configuration:/opt/SimpleHelp/configuration
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.simplehelp.rule=Host(`SUBDOMAIN.DOMAIN.EXT`)"
- "traefik.http.routers.simplehelp.entrypoints=web,websecure"
- "traefik.http.routers.simplehelp.tls.certresolver=myresolver"
- "traefik.http.services.simplehelp.loadbalancer.server.port=80"
- "traefik.udp.routers.simplehelp-udp.entrypoints=webudp"
- "traefik.udp.routers.simplehelp-udp.service=simplehelp"
- "traefik.udp.services.simplehelp.loadbalancer.server.port=80"
networks:
- frontbridge
networks:
frontbridge:
external: true
我只是把那個路徑名稱從你貼的 GitHub 連結上的名稱改掉了。
在我這裡運作正常,當我移除那個 networking 區段時(反正 NAT 已經在上面定義過了)
services:
#SimpleHelp 容器
simplehelp:
image: tecneo/simplehelp
container_name : simplehelp
ports:
- "8680:80"
- "8681:80/udp"
- "8643:443"
- "8643:443/udp"
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /share/Container/SimpleHelp/configuration:/opt/SimpleHelp/configuration
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.simplehelp.rule=Host(`SUBDOMAIN.DOMAIN.EXT`)"
- "traefik.http.routers.simplehelp.entrypoints=web,websecure"
- "traefik.http.routers.simplehelp.tls.certresolver=myresolver"
- "traefik.http.services.simplehelp.loadbalancer.server.port=80"
- "traefik.udp.routers.simplehelp-udp.entrypoints=webudp"
- "traefik.udp.routers.simplehelp-udp.service=simplehelp"
- "traefik.udp.services.simplehelp.loadbalancer.server.port=80"
在我這裡,設定資料夾能夠成功被填充