将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:
- 打开VS Code设置(快捷键
Ctrl+,) - 搜索
dev.containers.tempDirectory - 设置为容器内已存在的目录(如
/var/tmp)或本地合法临时目录 - 保存设置后重启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
相关产品推荐
相关产品推荐

