现已发布!阅读关于 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.