Contents

使用 PhpStorm 透過 Docker Remote 遠端操作

最近在測試 PhpStorm 時,因為不想直接在 Windows 10 本機安裝 Docker,所以就研究了一下能不能讓 PhpStorm 去連遠端主機上的 Docker daemon。後來發現 IDE 本身的確支援這種做法,只是設定時有一個重點不能忽略:遠端 Docker API 如果直接裸露在網路上,安全風險很高。

所以這篇除了記錄怎麼接,也順手把安全上的基本概念補一下。

phpstorm-docker.avif

先理解這件事到底在做什麼

PhpStorm 連遠端 Docker,本質上就是讓 IDE 去呼叫遠端主機上的 Docker API。也就是說,從 PhpStorm 觸發的 container list、 image build、 docker compose 等操作,最後都會變成對遠端 Docker daemon 的控制。

這很方便,因為:

  • 本機不用安裝完整 Docker 環境。
  • 可以直接用遠端 Linux 主機當執行環境。
  • IDE 裡的 Docker 功能還是能照常用。

但也因為它是控制 Docker daemon,所以一旦暴露方式不安全,風險很高。能控 Docker,很多時候就等於能進一步碰到主機資源。

最直接的做法:打開 TCP Docker API

當時我測試時看到的做法大概像這樣:

1
sudo dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:5555

如果只是 lab 環境,這樣做確實很快,PhpStorm 就可以指定連到 tcp://你的主機:5555

但這種方式有兩個前提:

  1. 你知道自己在暴露什麼。
  2. 這不是直接對外開放給整個網路的正式環境。

比較建議的做法:至少用 SSH 或 TLS

如果是現在要重新做一次,我會優先選:

  • 用 SSH 方式連遠端 Docker。
  • 或者用 TLS 保護 Docker TCP API。

原因很簡單,裸露的 Docker TCP port 真的太危險。以前很多教學只是為了示範方便,但實務上不太建議直接把 0.0.0.0:55552375 開給外部網路。

不要把未保護的 Docker API 直接對外暴露
如果 Docker Remote API 沒有經過 SSH、 TLS、 VPN 或防火牆限制,等於把高權限控制入口直接放到網路上。測試環境都應該至少限制來源 IP,正式環境更不建議裸露。

如果真的只是內網 Lab 測試

如果你只是家裡實驗、內網短暫測試,最簡單可以先在遠端主機啟用 Docker daemon TCP listener,再讓 PhpStorm 連過去。

例如可以在啟動時加入:

1
sudo dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:5555

或在 daemon.json 裡設定:

1
2
3
4
5
6
{
	"hosts": [
		"unix:///var/run/docker.sock",
		"tcp://0.0.0.0:5555"
	]
}

之後重啟 Docker 服務,PhpStorm 裡選 TCP Socket 連線即可。

但就算是 lab,我還是建議至少做這幾件事:

  • 防火牆限制來源 IP
  • 不要直接暴露到公網
  • 測完就關掉

PhpStorm 端大概怎麼設

在 PhpStorm 裡,通常就是:

  1. 打開 Settings。
  2. 找到 Docker 或 Build, Execution, Deployment 相關設定。
  3. 新增一個 Docker 連線。
  4. 選擇 TCP socket、 SSH 或其他支援方式。
  5. 填遠端主機位址與 port。

連上後,如果能正常列出 images、 containers,基本上就代表設定成功。

我自己當時的心得

第一次設定時,我原本還覺得直接打指令比較快,因為偶爾用一下 Docker,SSH 到主機上敲 docker ps 其實很直覺。不過如果你已經習慣在 IDE 裡一起看 container、 logs、 compose 與 interpreter,遠端整合起來確實方便不少。

尤其對 PHP 專案來說,如果開發環境本來就在遠端 Linux 主機,讓 PhpStorm 直接接 Docker,會比在本機硬湊一套環境省事很多。

什麼時候適合這樣做

我覺得比較適合的情境是:

  • 本機資源不想再跑一套 Docker。
  • 團隊共享一台測試主機。
  • 專案執行環境本來就固定在遠端 Linux。
  • 想直接從 IDE 觀察 container 狀態。

如果只是偶爾下幾條 Docker 指令,其實直接 SSH 上去操作也很夠用。

心智圖

mindmap root((PhpStorm 遠端 Docker)) 目的 本機不裝 Docker 直接控遠端主機 IDE 整合操作 連線方式 TCP Socket SSH TLS 安全重點 不裸露公網 限制來源 IP 測完關閉 設定位置 PhpStorm Docker 設定 daemon.json dockerd hosts 使用場景 遠端 Linux 開發 共用測試主機 看 logs 與 container

小結

PhpStorm 確實可以很方便地控制遠端 Docker,但方便的另一面就是權限很重,所以安全性不能省略。我的建議是:測試環境可以先快速驗證連線可不可行,但真正要長期使用時,還是優先走 SSH 或 TLS。

參考資料: