用網頁瀏覽器開啟一個網頁瀏覽器,這個玩法滿有趣的,這種感覺相當於你在 A 地連到 B 地去開網頁瀏覽器,一方面開啟網頁的位置變了,二方面存取 B 端資源的方式則是用 80/433 埠就完成跳轉,而這件事只要會啟動容器就可以完成了唷。

由 LinuxServer.io 發行的 lscr.io/linuxserver/msedge Docker 映像,是基於 Chromium 的 Microsoft Edge 瀏覽器封裝於 KasmVNC GUI 容器中,讓你可以透過 3000(HTTP)與 3001(HTTPS)連接埠提供遠端圖形化瀏覽體驗。

透過這個容器印象檔,就可以輕鬆達成想要的「用網頁瀏覽器開啟一個網頁瀏覽器」唷。

環境變數與運行組態

這個印象檔提供滿多環境變數可以設定的,整理如下:

環境變數(-e

變數 說明
CUSTOM_PORT HTTP 服務內部埠(預設 3000)
CUSTOM_HTTPS_PORT HTTPS 服務內部埠(預設 3001)
CUSTOM_USER Basic Auth 使用者名稱,預設 abc
PASSWORD Basic Auth 密碼,預設 abc;未設即無認證
SUBFOLDER 反向代理子目錄,需以 /subfolder/ 格式
TITLE 瀏覽器頁面標題,預設 “KasmVNC Client”
FM_HOME 檔案管理器根目錄,預設 /config
START_DOCKER 設為 false 將不啟動容器內的 DinD Docker 環境
DRINODE 指定 DRI3 GPU 裝置,如 /dev/dri/renderD128
DISABLE_IPV6 任意值啟用即可關閉 IPv6
LC_ALL 設定容器語言,如 fr_FR.UTF-8、ar_AE.UTF-8
NO_DECOR 取消視窗邊框,適用於 PWA 模式
NO_FULL 禁止自動全螢幕

務必設定密碼,否則很容易被掃瞄到,因此成為黑客的待宰羔羊。

運行組態

  • --privileged:啟用 Docker-in-Docker(DinD),可搭配 -v /home/user/docker-data:/var/lib/docker 提升效能。
  • -v /var/run/docker.sock:/var/run/docker.sock:將宿主機 Docker socket 掛入容器以供 CLI 操作或應用內 Docker 呼叫。
  • --device /dev/dri:/dev/dri:將 GPU 裝置掛入容器,可搭配 DRINODE 參數實現 GPU 加速(僅限開放原始碼驅動)。
  • 可透過 LC_ALL 調整預設語系;映像預設僅含 Latin 字型,若需 CJK 字型,可安裝 mods 並設定:

      -e DOCKER_MODS=linuxserver/mods:universal-package-install
      -e INSTALL_PACKAGES=fonts-noto-cjk
      -e LC_ALL=zh_CN.UTF-8
    
  • Web 介面設定中啟用 “IME Input Mode” 後,可在非 en_US 鍵盤下使用本地輸入法。

Docker Compose

我個人是覺得使用 docker-compose 的方式來管理啟動指令,是相當方便的,除了可以文件化整個啟動指令,還可以藉此做版控,我使用的基本樣板如下:

version: "3.8"

services:
  msedge:
    image: lscr.io/linuxserver/msedge:latest  # 官方 Edge GUI 容器映像
    container_name: msedge
    security_opt:
      - seccomp:unconfined        # 解決老核心/新 syscalls 相容性問題(可選)

    environment:
      - PUID=1000                 # 主機使用者 UID(請替換為你的 uid)
      - PGID=1000                 # 主機群組 GID(請替換為你的 gid)
      - TZ=Asia/Taipei            # 設定為台北時區
      - CUSTOM_USER=YOUR_ACCOUNT  # HTTP Basic Auth 帳號(可選)
      - PASSWORD=YOUR_PASWORD     # HTTP Basic Auth 密碼(可選)
      - EDGE_CLI=--no-sandbox     # 傳遞給 Chromium 的額外 CLI 參數

    volumes:
      - ./config:/config          # 永續化設定存放目錄

    ports:
      - "3000:3000"               # HTTP GUI 介面對應埠
      - "3001:3001"               # HTTPS GUI 介面對應埠

    shm_size: "1gb"               # Edge 啟動所需共享記憶體大小
    restart: unless-stopped       # 容器異常重啟策略

    # 以下為可選 GPU 加速設定:
    devices:
      - /dev/dri:/dev/dri         # DRI3 GPU 加速(僅開放原始碼驅動)

    # 如需 Nvidia GPU 支援,加入以下部署設定:
    # deploy:
    #   resources:
    #     reservations:
    #       devices:
    #         - driver: nvidia
    #           count: 1
    #           capabilities: [compute,video,graphics,utility]

當然,有些環境還是適合用 docker run 指令的方式來啟動容器,例如在 Synology NAS 上就可以用以下 docker run 指令搭配排成管理氣,達成啟動 NAS 自動啟動該容器,我在我 NAS 所使用的指令樣板如下:

docker run -d --name=edge \
-p 3000:3000 \
-p 3001:3001 \
-v /volume1/docker/edge:/config \
-e PUID=1000 \
-e PGID=100 \
-e TZ=Asia/Taipei \
-e CUSTOM_USER=YOUR_ACCOUNT \
-e PASSWORD=YOUR_PASWORD \
--shm-size="5gb" \
--restart=always \
lscr.io/linuxserver/msedge

後記

如果你習慣使用的是 Chrome 或 Firefox 瀏覽器了話,也可以參考 linuxserver/docker-chromiumlinuxserver/docker-firefox 來啟動對應的容器喔。


參考資料:


Poy Chang

Trial and Error