在开发容器中挂载主机卷

Mounting host volumes in development container

我创建了一个带有一些自定义依赖编译的开发容器。经过几个小时的构建,是时候 运行 我的第一次测试了。我的测试需要在单独的文件夹中加载主机磁盘上的文件(预训练模型和一些数据)。 运行 工具,如 docker compose 或 docker 命令行 我可以通过指定卷与容器共享主机文件。开发容器与代码文件夹的作用相同,但我如何为开发容器指定额外的卷。

你可以使用 Multi Compose files

假设您有一个 docker-compose.yml 文件,其中包含所有环境(开发、生产等)的基本配置:

web:
  image: example/my_web_app:latest
  ports:
    - "1234:1234"

然后您还有其他环境文件,例如 docker-compose.env.yml,您可以在其中添加或覆盖基于环境的配置。

对于您的示例,您将有一个 docker-compose.dev.yml,您可以在其中添加开发容器所需的额外卷:

web:
  volumes:
    - 'path/to/host/folder:/path/to/container/folder'

在开发过程中,您将启动堆栈:

docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d

注意:在您的情况下,请务必检查在覆盖文件 here, and especially volumes 时如何处理属性。

编辑:现在要在 devcontainer.json 中使用多个 docker-compose.yml 文件,请使用 dockerComposeFile 属性。在这里,您将删除“构建”属性 并提供 docker-compose 个文件的列表:

...
  "dockerComposeFile": [
    "path/to/docker-compose.yml",
    "path/to/docker-compose.dev.yml"
  ],
  "service": "web",
  "shutdownAction": "stopCompose",
...

/!\ 请注意,文件的顺序很重要,因为后面的文件会覆盖前面的文件。