docker-compose 中的 Windows 10 绑定安装不起作用

use*_*074 1 windows docker docker-compose docker-volume

我正在使用 docker-compose 来管理多容器应用程序。其中 1 个容器需要访问主机上目录的内容。

根据有关 docker 和 docker-compose 的各种文档来源,这似乎很简单,但我正在努力使其正常工作。

  event_processor:
    environment:
      - COMPOSE_CONVERT_WINDOWS_PATHS=1
    build: ./Docker/event_processor
    ports:
      - "15672:15672"
    entrypoint: python -u /src/event_processor/event_processor.py
    networks:
      - app_network
    volumes:
      - C/path/to/interesting/directory:/interesting_directory"
Run Code Online (Sandbox Code Playgroud)

运行此我收到错误消息:

错误:命名卷“C/path/to/interesting/directory:/interesting_directory:rw”用于服务“event_processor”,但未在卷部分找到声明。

我从文档中了解到只有在容器之间共享数据时才需要顶级声明

这不是这里的情况。

我上面链接的 docker-compose 文档有一个示例,它似乎完全符合我的需要:

version: "3.2"
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - type: volume
        source: mydata
        target: /data
        volume:
          nocopy: true
      - type: bind
        source: ./static
        target: /opt/app/static

networks:
  webnet:

volumes:
  mydata:
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试时,我收到有关语法的错误:

错误:撰写文件 '.\docker-compose.yaml' 无效,因为:services.audio_event_processor.volumes 包含无效类型,它应该是字符串

所以我试着一起玩:

volumes:
  - type: "bind"
    source: "C/path/to/interesting/directory"
    target: "/interesting_directory"
Run Code Online (Sandbox Code Playgroud)

错误:撰写文件 '.\docker-compose.yaml' 无效,因为:services.audio_event_processor.volumes 包含无效类型,它应该是字符串

所以又是同样的错误。

我也尝试了以下方法:

volumes:
  - type=bind, source=C/path/to/interesting/directory,destination=/interesting_directory
Run Code Online (Sandbox Code Playgroud)

没有错误,但是附加到正在运行的容器上,我看到了以下两个文件夹;

type=bind, source=C
Run Code Online (Sandbox Code Playgroud)

因此,我似乎能够使用 1 个字符串创建多个卷(尽管在这种情况下正斜杠正在切割字符串),但我没有将其映射到主机目录。

我已经阅读了文档,但我想我错过了一些东西。有人可以发布一个将 Windows 目录从主机安装到 linux 容器的示例,以便容器中可以使用 windows 目录的现有内容吗?

use*_*074 5

好的,所以这里有多个问题:

1.

我有

version: '3'
Run Code Online (Sandbox Code Playgroud)

在我的 docker-compose.yml 的顶部。此处描述的长语法直到 3.4 才实现,因此当我将其更新为以下内容时,我不再收到奇怪的语法错误:

version: '3.6'
Run Code Online (Sandbox Code Playgroud)

2.

我在 2 台 Windows PC 上使用我的 docker 帐户。根据另一篇 stackoverflow 帖子的提示,我将 Docker 重置为出厂设置。我不得不向 docker 提供计算机用户名和密码,并告知这是访问本地文件系统内容所必需的 - 此时我记得在另一台 PC 上执行此操作,因此我不确定此凭据是否正确. 使用当前 PC 的正确凭据,我能够使用预期结果绑定安装卷,如下所示:

   version: '3.6'

   event_processor:
    environment:
      - COMPOSE_CONVERT_WINDOWS_PATHS=1
    build: ./Docker/event_processor
    ports:
      - "15672:15672"
    entrypoint: python -u /src/event_processor/event_processor.py
    networks:
      - app_network
    volumes:
      - type: bind
        source: c:/path/to/interesting/directory
        target: /interesting_directory
Run Code Online (Sandbox Code Playgroud)

现在它按预期工作。我不确定是恢复出厂设置还是更新的凭据修复了它。明天当我使用另一台PC并更新时会发现。