參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

容器工具提示和技巧

本文介紹了 Visual Studio Code 容器工具擴充套件的故障排除提示和技巧。有關設定和使用容器的詳細資訊,請參閱概述以及針對 Node.jsPythonASP.NET 的快速入門文章。

以非 root 使用者身份執行

出於安全原因,我們建議在執行 容器:將 Docker 檔案新增到工作區... 命令時選擇預設埠,或者儘可能選擇一個大於 1023 的埠。這將允許 VS Code 使用非 root 訪問許可權來配置 Dockerfile,並防止惡意使用者在容器中提升許可權。在某些情況下,沒有埠選擇,因此容器工具擴充套件預設配置非 root 訪問。在所有情況下,您都必須確保應用程式修改或使用的每個資源(例如埠和檔案)都能被容器中的非 root 使用者訪問。

如果您在向工作區新增 Dockerfile 時選擇了小於 1024 的埠,容器工具擴充套件將無法建立一個以非 root 使用者身份執行容器的 Dockerfile。這是因為此範圍內的埠被稱為知名系統埠,必須以 root 許可權執行才能將網路套接字繫結到 IP 地址。

如果您選擇一個非系統埠,容器:將 Docker 檔案新增到工作區... 命令會設定非 root 許可權。如果您當前的 Dockerfile 和 tasks.json 未設定為非 root 使用者使用,請嘗試執行容器:將 Docker 檔案新增到工作區... 命令,並選擇一個大於 1023 的埠。此命令將覆蓋您當前的 Dockerfile 和 tasks.json。對於某些專案型別,例如Python: General,您可能仍需要修改 Dockerfile 和 tasks.json。在 Dockerfile 中,您必須公開一個非系統埠,為您的應用程式碼建立一個工作目錄,然後新增一個有權訪問該應用目錄的非 root 使用者。請確保在所有引用它的地方都更新您公開的埠。在下面的示例中,必須更新 Gunicorn 埠以匹配公開的埠。

# 1024 or higher
EXPOSE 1024

# ... other directives such as installing requirements.txt file

# Creates /app in container if it does not already exist
# Ports code into /app
WORKDIR /app
ADD . /app

# Creates a non-root user and adds permission to access the /app folder
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

CMD ["gunicorn", "--bind", "0.0.0.0:1024", "pythonPath.to.wsgi"]

接下來,確保 tasks.json 中的 docker run 任務也使用相同的埠。您通常可以在 tasks.json 中搜索舊埠號的所有出現之處,並將其替換為新埠號。以下示例顯示了 Python Django 應用程式中所需的更改。

{
  "type": "docker-run",
  "label": "docker-run: debug",
  "dependsOn": ["docker-build"],
  "python": {
    "args": [
      "runserver",
      "0.0.0.0:1024", //<- Change the number after the colon
      "--nothreading",
      "--noreload"
    ],
    "file": "manage.py"
  }
}

在 Linux 上出現“connect EACCES /var/run/docker.sock”錯誤

由於 VS Code 以非 root 使用者身份執行,您需要按照 Linux 的安裝後步驟中的“以非 root 使用者身份管理 Docker”的步驟來從擴充套件訪問 Docker。

容器和映象從容器資源管理器中消失

這很可能是由另一個名為 Docker Explorer(非微軟編寫)的擴充套件衝突引起的。要解決此問題,請使用 vscode-docker issue #1609 中描述的解決方法。

擴充套件在遠端計算機上找不到 Docker

錯誤訊息:“連線失敗。Docker 是否已安裝並正在執行?”

  1. 請確保 Docker 引擎已在遠端計算機上安裝,並且 Docker CLI 可以正常工作(從終端執行 docker ps 並確保它不會返回任何錯誤)。
  2. 如果您正在使用遠端開發環境(透過 SSH 連線的遠端計算機、WSL 子系統、GitHub Codespace),請確保容器工具擴充套件在本地和遠端都已安裝。

無效的 URL 錯誤

如果您需要連線到遠端 Docker 守護程序,我們建議使用 Docker 上下文(contexts)而不是在設定中使用 containers.environment 屬性。請檢視此指南,瞭解如何建立和使用上下文與遠端 Docker 守護程序通訊。

如果您仍需要覆蓋當前使用的 Docker 上下文,請確保您的 DOCKER_HOST 環境變數或 containers.environment.DOCKER_HOST 屬性在 URL 中包含協議(例如,ssh://myuser@mymachinetcp://1.2.3.4)。

注意:請記住,您的 containers.environment.DOCKER_HOST 屬性將覆蓋您的 Docker 上下文,而 DOCKER_HOST 環境變數將同時覆蓋 containers.environment.DOCKER_HOST 屬性和您的 Docker 上下文。

提示:在 Powershell 中,您可以使用 $ENV:DOCKER_HOST = 'ssh://username@1.2.3.4' 來更改您的 Docker 環境變數。

問題和反饋

我們期待您的反饋!如果您有任何想法或建議,請報告問題