如何解决Docker容器挂载Codespace工作目录时空目录的问题?
GitHub Codespaces Docker 挂载工作目录为空解决方案
问题复现
在Codespace中执行目录查看可以看到正常文件,但将对应目录挂载到Docker容器后目标路径为空,示例如下:
$ ls /workspaces/myrepo [list of files] $ docker run -it --rm -v /workspaces/myrepo:/app alpine:latest / # ls /app [nothing]
根因说明
GitHub Codespaces 采用Docker-in-Docker架构,Codespace本身运行在宿主的Docker容器中,你在Codespace终端调用的docker命令实际对接的是宿主的Docker守护进程。直接传入Codespace内部的/workspaces/xxx路径时,宿主的Docker守护进程无法识别这个内部容器的路径,因此会默认创建一个空目录挂载到目标容器中。
解决方案
直接使用Codespace官方预定义的环境变量${CODESPACE_VSCODE_FOLDER},该变量已自动映射为宿主层面对应工作目录的真实路径,直接替换挂载参数里的本地路径即可:
- 挂载整个工作目录
docker run -it --rm -v ${CODESPACE_VSCODE_FOLDER}:/app alpine:latest
执行后进入容器查看/app路径即可看到所有文件。
- 挂载工作目录下的指定子目录
只需在环境变量后拼接对应子目录路径即可,示例挂载src目录:
docker run -it --rm -v ${CODESPACE_VSCODE_FOLDER}/src:/app/src alpine:latest
内容的提问来源于stack exchange,提问作者davetapley
相关产品推荐
相关产品推荐

