Windows 10绑定docker-compose中的挂载不起作用

时间:2018-05-24 16:33:54

标签: windows docker docker-compose docker-volume

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

根据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"

运行此命令我收到错误消息:

  

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

I understand from the docs that a top level declaration is only necessary if data is to be shared between containers

这不是这种情况。

上面链接的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:

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

  

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

所以我试着一起玩:

volumes:
  - type: "bind"
    source: "C/path/to/interesting/directory"
    target: "/interesting_directory"

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

再次出现同样的错误。

我也尝试了以下内容:

volumes:
  - type=bind, source=C/path/to/interesting/directory,destination=/interesting_directory

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

type=bind, source=C

所以看起来我能够创建一个包含1个字符串的卷(虽然正斜杠在这种情况下会剪切字符串),但我没有将它映射到主机目录。

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

1 个答案:

答案 0 :(得分:2)

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

1

我有

version: '3'

位于我的docker-compose.yml的顶部。长语法described here直到3.4才实现,因此当我将其更新为:

时,我停止接收奇怪的语法错误
version: '3.6'

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

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