如何使用VSCode的远程开发扩展在容器外部的Docker容器中打开文件

时间:2020-09-02 10:18:33

标签: docker visual-studio-code

是否可以使用Remote Development extension for VSCode在容器外部的本地操作系统的Docker容器中打开文件 (例如,像在Remote - WSL extension for VSCode中一样,右键单击“在资源管理器中打开”)

我试图:

  • 在没有上下文的情况下构建Docker映像
  • 挂载文件系统卷 这样我就可以从容器访问操作系统中的文件而无需复制。

要在没有上下文的情况下进行构建,可以使用docker build - < Dockerfile(请参阅docker docs)。

我可以通过docker run -v <path-to-file-in-host>:<path-to-file-in-container> IMAGE_NAME挂载文件(如heredocker docs here中所述)

可以从devcontainer.json reference中将build args传递到devcontainer.json中的Docker build中,但这不适用于- <,因为vscode-dev-containers默认包含构建上下文。

扩展程序还会在构建后自动运行容器,因此我不确定如何覆盖它。

任何提示将不胜感激!

1 个答案:

答案 0 :(得分:0)

TL; DR 默认情况下,dev-containers扩展(自2020年10月22日开始)将安装文件从本地OS绑定到容器,以便可以在本地OS上打开文件。

要进行更快的绑定安装(在Sending build context to docker daemon...步骤中跳过docker build .,请忽略.dockerignore中的所有内容,并在.devcontainer/devcontainer.json中指定bind mount以将文件系统安装到容器。

.
├── .devcontainer/devcontainer.json
├── .dockerignore
├── .git
├── .gitignore
├── Dockerfile
├── LICENSE
├── README.md
├── data
├── src
└── tests

.dockerignore

# Ignore everything
**

.devcontainer/devcontainer.json

来自Changing or removing the default source code mount

{
    ...
    "workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/workspace,consistency=delegated",
    "workspaceFolder": "/workspace"
    ...
}

(备份计划)docker cp

还可以使用docker cp将文件复制进出容器;如果我想在本地操作系统上的Excel中查看容器数据文件夹中的csvtxt文件,则可以运行:

docker cp 12890c3a2602:/workspaces/drem/data/commercial_building_benchmarks comm_bldg_bmarks

其中12890c3a2602是我的容器ID,/workspaces/drem/data/commercial_building_benchmarks是我的容器中数据文件夹的路径,而comm_bldg_bmarks是我的本地操作系统上目标文件夹的名称。有关更多信息,请参见Copying Files To And From Docker Containers ...