Vscode无缝连接docker支持与主机文件同步

为什么需要?

我们在上一篇Ubuntu深度学习的相关配置中最后讲到,将工作目录下的文件装载到了容器之下,这样我们在主机中编写一个文件,如tf.py。在容器中执行,需要输入以下命令。

docker exec tf python './tf.py'

这样每改一下文件,想要看效果的话,就需要输入以上命令。而且,还不方便调试。然后,我就在想能不能做到像我平常写代码那样,在VScode中,点一下就运行,而且可以调试呢?于是便有了本文。

准备工作

  • 安装好VScode并且保证互联网连接正常。然后将工作目录装载到容器的/root/Project目录下,不然/tmp的文件实在是太乱七八糟了。
docker run --gpus all -itd --name tf --rm -v ~/Project:/root/Project  tensorflow/tensorflow:latest-gpu-py3

操作流程

首先安装两个插件dockerRemote Development

VScode的docker插件

上图中可以看到tensorflow的容器已经处于运行中了,然后再打开Remote Development

Remote Development

显示有一个容器待连接,然后选择它,打开容器中的Project文件夹

VScode in Container

然后安装Python插件和调试工具,修改tf.py文件

import tensorflow as tf

print("hello tensorflow")

点击右边的运行图标,成功输出。

run tensorflow

打开主机文件

docker主机文件同步

发现修改也已经同步,Over,现在可以愉快的写代码了。

容器开发中的“文件同步”要分清 bind mount 和镜像内文件。开发代码适合挂载,依赖和构建产物则不一定适合与主机共用,特别是 Windows/macOS 主机与 Linux 容器之间存在文件系统和二进制差异。如果使用新版 VS Code,可以把这套手工流程迁移到 Dev Containers 配置,用文件记录镜像、挂载、端口和扩展,比每次凭记忆连容器更可复现。

可用性说明:本文发布于 2020 年 1 月,距今已超过五年。文中涉及的软件版本、接口、下载地址、命令参数和操作界面可能已经发生变化,部分方案在当前环境下可能失效。请结合官方最新文档核对后再操作,生产环境使用前务必先行验证。

版权声明: 本文首发于 指尖魔法屋-Vscode无缝连接docker支持与主机文件同步https://blog.thinkmoon.cn/post/692-guide-vscode-docker/) 转载或引用必须申明原指尖魔法屋来源及源地址!