現已釋出!閱讀關於 11 月新增功能和修復的內容。

容器工具提示和技巧

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

以非 root 使用者身份執行

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

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

Containers: Add Docker Files to Workspace... (容器:將 Docker 檔案新增到工作區...) 命令會在您選擇非系統埠時設定非 root 許可權。如果當前的 Dockerfile 和 tasks.json 未設定為非 root 使用,請嘗試執行 Containers: Add Docker Files to Workspace... (容器:將 Docker 檔案新增到工作區...) 命令,並選擇一個大於 1023 的埠。此命令將覆蓋您當前的 Dockerfile 和 tasks.json。對於某些專案型別,例如 Python: General (Python:通用),您可能仍需要修改 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 安裝後步驟 中“將 Docker 作為非 root 使用者進行管理”的步驟來從擴充套件程式訪問 Docker。

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

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

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

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

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

無效的 URL 錯誤

如果您需要連線到遠端 Docker 守護程式,我們建議使用 Docker 上下文而不是在設定中使用 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 環境變數

問題和反饋

我們非常重視您的反饋!如果您有任何想法或建議,請 報告一個 issue

© . This site is unofficial and not affiliated with Microsoft.