ERROR: In file './docker-compose.yml', volume must be a mapping not a string

后端 未结 8 1790
清歌不尽
清歌不尽 2020-12-09 02:31

Question: Why do I get this error?

ERROR: In file \'./docker-compose.yml\', volume \'mariavolume\' must be a mapping not a string.

相关标签:
8条回答
  • 2020-12-09 03:06

    Unfortunately, there is no such a feature.

    You can’t map a top-level volume in docker-compose.

    Here are the options:

    • Adding volume per container and map it there. (like what Daniel did here)
    • Create a volume outside of the compose (with mapping) and use it in your compose.

      volumes:
         maria_volume: 
             external:
                 name: volume-name
      
    0 讨论(0)
  • 2020-12-09 03:13

    correct syntax for volume is
    volumes: first:
    where first is just a placeholder name to be used for volume

    0 讨论(0)
  • 2020-12-09 03:18

    I've just tackled this issue myself. If you just want a volume to store data, then do as below. This will create/reuse a volume that is persisted to disk as part of the Docker graph driver.

    The next question is where is this?.

    You can find it inside the docker image - Default Location -

    C:\Users\Public\Documents\Hyper-V\Virtual hard disks

    db:
      image: mariadb
      restart: always
      environment:
        MYSQL_ROOT_PASSWORD: example
      volumes:
        - maria_volume: /var/lib/mysql
    
    volumes:
      maria_volume:
    

    Of course, if you are after mapping a host directory into docker rather than having it inside the Docker graph driver. Then you can do it as follows.

    db:
      image: mariadb
      restart: always
      environment:
        MYSQL_ROOT_PASSWORD: example
      volumes:
        - maria_volume: /var/lib/mysql
    
    volumes:
      maria_volume:
        driver: local
        driver_opts:
          o: bind
          type: none
          device: /C/mariadb
    

    Please note, when mapping over host directories as volume (at least on windows) you can have issues with read/write permissions, something I have yet to resolve myself.

    0 讨论(0)
  • 2020-12-09 03:19

    try this:

        volumes:
            - maria_volume: /var/lib/mysql
    volumes:
        maria_volume: 
            external:
                name: ~/mariadb
    
    0 讨论(0)
  • 2020-12-09 03:21

    I was running into the same issue as yourself and as a last act of despair I tried putting

    volumes:
      - maria_volume: /var/lib/mysql
    

    before

    environment:
      MYSQL_ROOT_PASSWORD: example
    

    I'm not sure what kind of magic applied here but in my case, it worked

    Let me know!

    0 讨论(0)
  • 2020-12-09 03:22

    In my case this was happening because I missed adding a : after the volume name.

    Instead of:

    volumes:
        - mysqldata:
    

    I had typed:

    volumes:
        - mysqldata
    

    docker-compose up gave me the same error as above.

    0 讨论(0)
提交回复
热议问题