错误:在文件'./docker-compose.yml'中,卷必须是映射而不是字符串

时间:2016-12-26 17:37:02

标签: wordpress docker-compose docker-volume

为什么会出现此错误? ERROR: In file './docker-compose.yml', volume 'mariavolume' must be a mapping not a string.

我的docker-compose文件几乎与此文件相同:https://docs.docker.com/compose/wordpress/

version: '2'
services:
  wordpress:
    image: wordpress:latest
    restart: always
    depends_on:
      - db
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_PASSWORD: example
      WORDPRESS_DB_HOST: 3306
  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - maria_volume: /var/lib/mysql
volumes:
  maria_volume: ~/mariadb

9 个答案:

答案 0 :(得分:7)

不幸的是,没有这样的功能。

您无法在docker-compose中映射顶级卷。

以下是选项:

  • 每个容器添加卷并将其映射到那里。 (就像丹尼尔所做的那样here
  • 在撰写之外创建一个卷(使用映射)并在您的撰写中使用它。

    (select s.title from allsongs s
    join beatles a ON s.id = a.songid)
    union all
    (select s.title from allsongs s
    join elvis a ON s.id = a.songid);
    

答案 1 :(得分:6)

在我的情况下,这种情况发生了,因为我错过了在卷名后添加:

而不是:

volumes:
    - mysqldata:

我打字了:

volumes:
    - mysqldata

docker-compose up给了我同样的错误。

答案 2 :(得分:1)

试试这个:

    volumes:
        - maria_volume: /var/lib/mysql
volumes:
    maria_volume: 
        external:
            name: ~/mariadb

答案 3 :(得分:0)

我遇到了与你自己相同的问题,并且作为绝望的最后一幕,我试着把

volumes:
  - maria_volume: /var/lib/mysql

environment:
  MYSQL_ROOT_PASSWORD: example

我不确定这里应用了什么样的魔法,但在我的情况下,它起作用了

让我知道!

答案 4 :(得分:0)

对我而言,这有效:

#docker_compose.yml:

volumes:
  postgres_data: {}
  static: { }

答案 5 :(得分:0)

尝试一下:

version: '2'
services:
  ...
  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - ~/mariadb:/var/lib/mysql

答案 6 :(得分:0)

我刚刚亲自解决了这个问题。如果您只想让卷存储数据,请执行以下操作。这将创建/重复使用作为docker graph驱动程序一部分持久化到磁盘的卷。下一个问题是这在哪里。您可以在docker映像中找到它-默认位置-$jsonFile1 = '{"val1":"ValueOne","val2":"ValueSecond","val3":"ValueThree","val4":"4","val5":"ValueFive","val6":"ValueSix"}'; $jsonFile2 = '{"0":"3","1":"5"}'; $first = json_decode($jsonFile1); $second = json_decode($jsonFile2, true); foreach ($first as $key => $firstvalue) { if (in_array(substr($key, -1),$second)) { echo "<strong>". $firstvalue . "</strong><br>"; } else { echo "<em>". $firstvalue . "</em><br>"; } }

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

当然,如果您是将主机目录映射到Docker之后,而不是将其包含在docker graph驱动程序中。然后,您可以按照以下步骤进行操作。

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

volumes:
  maria_volume:

请注意,当以卷的形式在主机目录上映射时(至少在Windows上),您可能会遇到读/写权限问题,这是我尚未解决的问题。

答案 7 :(得分:0)

正确的音量语法是
volumes: first:
,其中第一个只是用于体积的占位符名称

答案 8 :(得分:0)

试试这个,它对我有用

   volumes:
     - maria_volume: /var/lib/mysql

volumes:
  maria_volume: 
    drive: local