You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将VSCode附加至运行中Docker容器时出现目录不存在错误

解决VS Code Dev Containers无法重连Docker容器:/tmp目录不存在问题

问题背景

有一个正在运行的Docker容器,此前能正常通过VS Code Dev Containers连接,使用中意外断开后,尝试重连始终失败。核心报错日志如下:

[4047 ms] Command failed: /bin/sh -c cat >'/tmp/devcontainer-config-91de0ba6-e023-476c-b3a0-df813264bd3f.json'
[4047 ms] /bin/sh: 1: cannot create /tmp/devcontainer-config-91de0ba6-e023-476c-b3a0-df813264bd3f.json: Directory nonexistent
[4047 ms] Exit code 2

已尝试过映射/tmp目录、开放权限、以当前用户创建容器、使用privileged参数,均未解决问题。

排查与解决步骤

1. 直接修复容器内的/tmp目录

先进入容器确认/tmp状态,缺失则重建并配置标准权限:

# 进入目标容器
docker exec -it <容器名称/ID> /bin/bash

# 检查/tmp目录是否存在
ls -ld /tmp

# 若不存在则创建并设置sticky权限(符合/tmp的标准要求)
mkdir -p /tmp && chmod 1777 /tmp

2. 检查容器的tmpfs挂载配置

部分容器会用tmpfs挂载/tmp,若挂载参数异常可能导致目录无法创建。用以下命令查看挂载详情:

docker inspect <容器名称/ID> | grep -A 10 "Mounts"

如果/tmp是tmpfs挂载,检查是否存在tmpfs-size过小、权限配置错误等问题,必要时重启容器并修正挂载参数。

3. 清理VS Code Dev Containers本地缓存

本地缓存损坏可能导致连接逻辑异常,删除缓存后重试:

rm -rf ~/.vscode-remote-containers

重启VS Code后再次尝试连接容器。

4. 手动指定Dev Containers临时目录

在VS Code中强制指定已存在的临时目录,绕过默认的/tmp:

  1. 打开VS Code设置(快捷键Ctrl+,)
  2. 搜索dev.containers.tempDirectory
  3. 设置为容器内已存在的目录(如/var/tmp)或本地合法临时目录
  4. 保存设置后重启VS Code重连

5. 排查容器启动脚本/Entrypoint

部分容器的启动脚本(如entrypoint.sh)可能包含删除/tmp的逻辑,检查启动脚本中是否有rm -rf /tmp等危险操作,如有则修改脚本避免删除该目录。

6. Docker Compose场景额外检查

若容器通过Docker Compose启动,检查docker-compose.yml中/tmp的挂载配置:

  • 确认无误删除/tmp的volume配置
  • 若使用tmpfs挂载,确保配置正确:
    services:
      your-service:
        tmpfs:
          - /tmp:mode=1777,size=1G
    

内容的提问来源于stack exchange,提问作者Botz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 03:46:07