Docker Compose中的卷绑定问题及解决方案

187次阅读
没有评论

问题描述

在尝试创建一个卷(volume)以在多个容器之间共享,并将该卷绑定到主机的某个位置。然而,每次运行docker-compose up命令时,都会出现如下错误提示:

In file '.\docker-compose.yml', service 'volumes' must be a mapping not an array.

用户迄今为止还未理解这个问题的原因。以下是用户的docker-compose.yml文件内容:

version : '3.4'
services:
    testando-volume-compartilhado-a:
        image: carloshenriquecarniatto/teste:latest
        volumes:
            - D:\App:/app
        ports:
            - "10001:80"
            - "44378:443"

解决方案

请注意以下操作可能涉及版本差异及修改前做好备份。

方案1

根据回答中的提示,问题可能出在yaml文件中的缩进和格式。你可以尝试修改volumes的缩进以及路径的格式。在volumes下的路径部分,你可以将原来的形式改为以-开头,表示一个列表项,并将路径和目标位置分开,中间用:隔开,如下所示:

version : '3.4'
services:
    testando-volume-compartilhado-a:
        image: carloshenriquecarniatto/teste:latest
        volumes:
            - D:\App:/app
        ports:
            - "10001:80"
            - "44378:443"

在这个方案中,我们将volumes下的路径修改为列表的形式,确保正确的缩进。

方案2

还有一种可能是路径中的:符号可能导致了yaml解析错误。你可以尝试将路径中的:符号替换为其他字符,再运行docker-compose up命令。注意,这可能会导致路径问题,所以请确保替换后的路径在系统中是存在的。

version : '3.4'
services:
    testando-volume-compartilhado-a:
        image: carloshenriquecarniatto/teste:latest
        volumes:
            - D_App:/app
        ports:
            - "10001:80"
            - "44378:443"

这个方案中,我们将路径中的:替换为了_,以避免解析问题。

方案3

还有一种可能是缩进不正确。根据评论中的提示,你可以检查缩进是否一致,特别是在volumesportsimage等属性之间。

version : '3.4'
services:
    testando-volume-compartilhado-a:
        image: carloshenriquecarniatto/teste:latest
        volumes:
            - D:\App:/app
        ports:
            - "10001:80"
            - "44378:443"

在这个方案中,我们将缩进保持一致,确保各个属性之间的格式正确。

请根据上述方案尝试修复问题,并再次运行docker-compose up命令。如果问题仍然存在,你可能需要查阅Docker Compose的文档或寻求进一步的帮助来解决问题。

正文完