容器工具提示与技巧

本文介绍了 Visual Studio Code Container Tools 扩展的故障排除提示与技巧。有关设置和使用容器的详细信息,请参阅针对 Node.jsPythonASP.NET概述和快速入门文章。

以非 root 用户身份运行

出于安全原因,我们建议在执行 Containers: Add Docker Files to Workspace... 命令时选择默认端口,或者在可能的情况下选择大于 1023 的端口。这将允许 VS Code 将 Dockerfile 配置为非 root 访问权限,并防止恶意用户在容器中提升权限。在某些情况下,没有端口选择,因此 Container Tools 扩展默认会配置非 root 访问权限。在所有情况下,您必须确保应用程序修改或使用的每个资源(例如端口和文件)都可以被容器中的非 root 用户访问。

如果在向工作区添加 Dockerfiles 时选择小于 1024 的端口,则 Container Tools 扩展无法创建以非 root 用户身份运行容器的 Dockerfile。这是因为此范围内的端口被称为知名端口或系统端口,必须使用 root 权限执行,以便将网络 套接字绑定到 IP 地址。

如果选择非系统端口,Containers: Add Docker Files to Workspace... 命令会设置非 root 权限。如果当前的 Dockerfile 和 tasks.json 未设置为非 root 用途,请尝试运行 Containers: Add Docker Files to Workspace... 命令,并选择大于 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 用户身份运行的,因此您需要遵循 Post-installation steps for Linux 中的“以非 root 用户身份管理 Docker”步骤,以便从扩展中访问 Docker。

容器和镜像从容器资源管理器中消失了

这很可能是由与另一个名为 Docker Explorer 的扩展(非 Microsoft 开发)冲突引起的。要解决此问题,请使用 vscode-docker issue #1609 中描述的变通方法。

扩展未能在远程机器上找到 Docker

错误消息“连接失败。是否已安装并运行 Docker?”

  1. 确保远程机器上已安装 Docker 引擎,并且 Docker CLI 能够正常工作(从终端运行 docker ps 并确保它不返回任何错误)。
  2. 如果您使用的是远程开发环境(通过 SSH 的远程机器、WSL 子系统、GitHub Codespace),请确保在远程和本地都安装了 Container Tools 扩展。

无效的 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 环境变量

问题与反馈

我们期待您的反馈!如果您有任何想法或建议,请报告问题

English 한국어 中文(简体) 中文(繁體)
© . This website operates independently and is not affiliated with or endorsed by Microsoft. All brand names, logos, and trademarks are the property of their respective owners.