
如何找到進程從中讀取輸入的檔案描述符?
背景
我運行一個維特在 Alpine 容器中開發時(發音為 veet)伺服器。目前我登入容器並使用命令手動啟動Vite vite --host '0.0.0.0' --port 3000
,它接管控制台並允許互動輸入。因此,當檔案更改未在容器中的 Docker 磁碟區綁定掛載上註冊時(Windows 很愚蠢),我可以執行諸如重新啟動伺服器之類的操作。
問題
我想讓容器在啟動時執行此命令。當我這樣做時,我就失去了發送命令的能力,因為 Docker 不傳遞命令。
然後我製作了一個運行的腳本pnpm run dev &
;我以為我可以取得 Vite 伺服器的進程 ID,然後使用 傳送輸入到該檔案描述符echo "h" > /proc/17/fd/0
,但什麼也沒發生。我還嘗試了 PID 33。但是我怎麼才能找到正確的文件描述符(如果有的話)。
PS輸出到容器中
PID USER TIME COMMAND
1 root 0:00 node /usr/local/bin/pnpm run dev
17 root 0:00 node /root/task-01/node_modules/.bin/../vite/bin/vite.js --host 0.0.0.0 --port 3000
33 root 0:00 /root/task-01/node_modules/.pnpm/@[email protected]/node_modules/@esbuild/linux-x64/bin/esbuild --service=0.20.
39 root 0:00 sh
47 root 0:00 ps
免責聲明:現在應該使用 Docker watch 來解決這個問題,因為我將不再需要在文件更改時手動重新啟動伺服器;但我想看看它是否可能,因為這對其他情況有用。另外,不要因為我以 root 身份運作而感到羞恥,我通常不會這樣做。