使用vscode調(diào)試docker容器里的代碼確實(shí)方便,關(guān)鍵步驟包括:1.安裝remote – ssh、remote – containers和docker插件;2.啟動容器時映射調(diào)試端口并掛載代碼;3.通過docker插件右鍵選擇“attach visual studio code”連接容器;4.配置launch.JSon文件實(shí)現(xiàn)斷點(diǎn)調(diào)試;5.注意確保容器開啟調(diào)試模式、端口正確映射、路徑一致以及必要時添加等待調(diào)試器連接的語句。只要配置好環(huán)境并按步驟操作,即可順暢進(jìn)行容器內(nèi)調(diào)試。
調(diào)試 Docker 容器里的代碼,用 vscode 其實(shí)挺方便的。特別是當(dāng)你在開發(fā)過程中需要實(shí)時調(diào)試容器內(nèi)部運(yùn)行的應(yīng)用時,VSCode 提供了不錯的支持。關(guān)鍵在于配置好開發(fā)環(huán)境,并正確連接到 Docker 容器。
1. 準(zhǔn)備工作:安裝必要插件
VSCode 要能連接并調(diào)試 Docker 容器,首先得裝幾個插件:
- Remote – SSH / Remote – Containers:這是官方插件,用來遠(yuǎn)程連接或者直接在容器里開發(fā)。
- Docker 插件:可以管理本地的鏡像、容器,查看日志等。
安裝完成后,在左側(cè)活動欄會看到 Docker 的圖標(biāo),點(diǎn)擊進(jìn)去可以看到你本地運(yùn)行的所有容器。
2. 啟動一個可調(diào)試的 Docker 容器
如果你只是想調(diào)試一個已經(jīng)存在的服務(wù),那可以先啟動一個帶調(diào)試端口的容器。比如 python 應(yīng)用,可以在 docker run 命令中加上調(diào)試相關(guān)的參數(shù):
docker run -p 5678:5678 -v $(pwd):/app my-python-app
這里的 5678 是常用的調(diào)試端口(比如 Python 的 debugpy),根據(jù)你的語言和調(diào)試工具來定。
如果是 Node.js,也可以使用類似方式暴露調(diào)試端口,例如:
docker run -p 9229:9229 my-node-app
確保你的應(yīng)用代碼是掛載進(jìn)來的(通過 -v 參數(shù)),這樣你在 VSCode 中修改代碼后,容器內(nèi)也能同步更新。
3. 使用 Remote – Containers 連接到容器
VSCode 的 Remote – Containers 功能可以直接讓你“進(jìn)入”某個容器里面開發(fā)或調(diào)試。
操作步驟如下:
- 在左側(cè) Docker 插件里找到你想連接的容器;
- 右鍵選擇 “Attach visual studio code” 或者 “Open in Container”;
- 等待幾秒,VSCode 會打開一個新的窗口,里面就是容器內(nèi)的文件系統(tǒng)。
這時候你可以像本地一樣編輯代碼、運(yùn)行終端命令、設(shè)置斷點(diǎn)調(diào)試。
4. 配置 launch.json 實(shí)現(xiàn)斷點(diǎn)調(diào)試
調(diào)試的核心還是靠 .vscode/launch.json 文件來配置。
以 Python 為例,基本的配置如下:
{ "version": "0.2.0", "configurations": [ { "name": "Python: 遠(yuǎn)程附加", "type": "python", "request": "attach", "connect": { "host": "localhost", "port": 5678 }, "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "/app" } ] } ] }
Node.js 的話也類似,只是類型換成 “node”,端口換成 9229:
{ "type": "node", "request": "attach", "runtimeExecutable": "nodemon", "restart": true, "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "runtimeArgs": ["--inspect=9229", "app.js"], "port": 9229 }
關(guān)鍵是確保容器內(nèi)開啟了調(diào)試模式,并且端口映射正確。
5. 常見問題與注意事項(xiàng)
有時候你會發(fā)現(xiàn) VSCode 顯示連接成功但無法斷住,可能是下面幾個原因:
- 容器沒有開啟調(diào)試模式(比如沒加 –inspect 或沒啟用 debugpy)
- 端口映射不對,或者防火墻攔住了
- 代碼路徑不一致,導(dǎo)致斷點(diǎn)無法命中
- 沒有在代碼里加上等待調(diào)試器連接的語句(如 Python 的 import debugpy; debugpy.listen((‘0.0.0.0’, 5678)))
如果不確定問題出在哪,可以先在本地跑一遍調(diào)試流程,確認(rèn)沒問題后再放到容器里試。
基本上就這些。整個過程看起來有點(diǎn)復(fù)雜,其實(shí)只要把端口配對、路徑對應(yīng)、調(diào)試器啟動這幾個環(huán)節(jié)搞定,剩下的就是正常寫代碼 + 打斷點(diǎn)了。