Container Station,docker 的 ENV 檔案與 SSH 的比較

根據我的了解,QNAP 根本不支援,也沒有計劃在 Container Station 原生支援將 .env 檔案作為 docker 的 yaml 一部分。我有看到如果我能透過 SSH 建立 docker,確實會在 Container Station 顯示出來——但 GUI 幾乎都不能用(沒有指令,必須再次 SSH 進去管理容器)。我並不反對這樣做,但當我用相同的 yaml 透過 SSH 執行 docker compose 時,總是無法正常運作——我猜可能跟虛擬交換器/網路,或是儲存路徑參照有關。用同樣的 yaml 在 Container Station 裡卻完全沒問題。

有人也遇過這種情況嗎?我其實不介意把變數直接寫進 yaml,只是不明白為什麼這樣就能成功。很可惜我對 docker 和 linux 還不是很熟練,無法找出問題所在。

我特別用 Immich 嘗試過:Docker Compose [Recommended] | Immich

我放棄在 docker 上完全使用 CS。

將 CS 用於 portainer/dockge,然後用它來做管理。

在 CS 中建立一個新的 Application

services:
  portainer:
    container_name: portainer-ce
    image: portainer/portainer-ce:latest
    security_opt:
      - no-new-privileges:true
    environment:
      - TZ=America/Toronto
    ports:
      - 9001:8000
      - 9000:9000
      - 9043:9443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:rw
      - /share/Container/portainer-ce/data:/data:rw
    restart: always

  dockerproxy:
    container_name: dockerproxy
    image: ghcr.io/tecnativa/docker-socket-proxy:latest
    environment:
#      - PUID=1001
#      - PGID=1000
      - TZ=America/Toronto
      - CONTAINERS=1 # 允許存取查看 containers
      - SERVICES=1 # 允許存取查看 services(使用 Docker Swarm 時必要)
      - TASKS=1 # 允許存取查看 tasks(使用 Docker Swarm 時必要)
      - POST=0 # 禁止所有 POST 操作(實際上是唯讀)
    ports:
      - 127.0.0.1:2375:2375
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro # 以唯讀方式掛載
    restart: unless-stopped

你那邊的 dockerproxy 是什麼?我從來沒用過這個,有必要使用嗎?

它偽裝成 Docker,這樣我就可以讓所有東西存取 Docker 守護程式,而不需要給它們對 Docker 的原始無過濾存取權限。

你大概不需要這個,但它讓我感覺比較安心。

我剛剛在我的 QNAP 上用一個簡單的 docker-compose.yml 測試了 .env,透過 SSH 運作得很順利。

如果你可以分享你的 docker-compose.yml 和 .env 檔案(敏感資料可以移除),我很樂意幫你測試看看,找出可能出錯的地方。

我在 YAML 中發現了一個錯字,這就是所有問題的根源,所以就像你說的那樣,現在運作得很正常!

我想我會試試 Portainer——如果大家比起 CS 更喜歡它的話。即使我是用命令列建立的(不像 CS),它是否也能讓我在不透過 SSH 的情況下完成基本操作?

如我所述,你可以直接在 CS 上順利啟動 Portainer,甚至完全不需要使用 SSH。只需在 CS 裡建立一個新的應用程式,然後貼上 YAML 即可。

我建議稍微用一下 SSH 來設置另一個分享和儲存池。
我使用 /share/docker/。這樣 CS 做的任何事都不會碰到我用 Portainer 建立的東西。

使用 .env 檔案從命令列(SSH 登入)操作完全沒問題,正如其他人所說。我是在一個有特權的容器中運行 Dockhand,然後從那裡管理所有內容。例如,使用像這樣的 docker-compose.yaml 檔案:

volumes:
  dockhand_data:

services:
  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    user: "0:0"
    ports:
      - 3000:3000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data