vscode连接docker容器可通过remote - containers插件实现,具体步骤如下:1. 安装remote - containers插件,打开vscode扩展界面搜索并安装;2. 确保docker已安装且容器运行,可使用docker run启动测试容器;3. 选择连接方式:attach to running container用于临时调试已有容器,或open folder in container用于长期开发,后者需创建.devcontainer配置文件定义环境;4. 注意权限、端口映射、网络及性能问题,合理配置可提升体验。整个流程操作清晰,适合统一开发环境。

VSCode 连接 Docker 容器其实并不复杂,主要是借助官方提供的 Remote - Containers 插件来实现。这套配置适合需要在容器中开发、调试,同时又不想频繁切换环境的用户。下面我从几个关键点出发,说说怎么配置和使用。

安装 Remote - Containers 插件
VSCode 本身并不自带连接容器的功能,你需要先安装 Remote - Containers 插件。这个插件是微软官方出的,功能稳定,使用广泛。
安装方法很简单:

- 打开 VSCode,点击左侧的扩展图标(或按
Ctrl+Shift+X) - 搜索
Remote - Containers - 点击安装
安装完成后,你就能看到一个新的远程连接按钮(左下角),点击后可以选择连接到容器。
准备好 Docker 容器环境
在连接之前,确保你的本地或远程机器上已经安装好了 Docker,并且容器已经启动。如果你还没准备好容器,可以先用 docker run 启动一个测试用的容器,例如:

docker run -it --name mydev ubuntu bash
这样就创建并进入了一个 Ubuntu 容器。注意,为了让 VSCode 能连接进去,容器最好保持运行状态,且系统中要有基础的 shell 环境(如 bash)和一些常用工具(如 git、curl 等)。
用 VSCode 连接容器的两种方式
连接容器主要有两种方式,分别是:
- Attach to Running Container:连接已有的正在运行的容器
-
Open Folder in Container:用
.devcontainer配置文件,把某个项目目录挂载进一个新的容器中开发
Attach to Running Container
这种方式适合临时连接一个已有容器查看或调试。操作步骤如下:
- 在 VSCode 左下角点击远程连接按钮
- 选择
Remote-Containers: Attach to Running Container - 从列表中选择你要连接的容器
- VSCode 会自动在容器中安装一个轻量的
vscode server,然后打开一个新的窗口连接进去
这种方式适合快速进入容器查看文件、运行命令等,但不适合长期开发。
Open Folder in Container
这是更推荐的方式,适合长期开发项目。你需要在项目根目录下创建一个 .devcontainer 文件夹,里面包含 Dockerfile 或 devcontainer.json 文件,用于定义开发环境。
举个简单的例子:
- 在项目根目录下新建
.devcontainer/devcontainer.json文件 - 内容大致如下:
{
"build": {
"dockerfile": "Dockerfile"
},
"customizations": {
"vscode": {
"extensions": ["ms-python.python"]
}
}
}- 然后在 VSCode 中打开这个文件夹,点击提示“Reopen in Container”,VSCode 就会自动构建一个容器,并把项目挂载进去
这种方式的好处是环境统一、可复用,而且可以配置默认安装的插件和依赖。
一些常见问题和注意事项
-
权限问题:容器中运行的用户可能和你本地不一致,导致某些文件权限出错。可以在
devcontainer.json中配置"remoteUser": "root"或者自定义用户。 -
端口映射:如果你的项目需要访问本地端口(比如 8080),记得在
devcontainer.json中配置"appPort": [8080] - 网络问题:如果容器需要访问外部网络,或者和其他容器通信,记得在构建时指定合适的网络模式
-
性能问题:挂载本地文件夹到容器中,有时会影响性能,特别是 macOS 和 Windows 上。可以考虑使用
codespaces或者 WSL2 提升性能
基本上就这些。整个过程不算太复杂,但有些细节容易忽略,比如权限、端口映射、用户配置等。只要按照步骤一步步来,一般都能顺利连接上容器进行开发。










