40

问题: 为什么会出现此错误?

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

我的 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
4

9 回答 9

21

就我而言,发生这种情况是因为我错过了:在卷名之后添加一个。

代替:

volumes:
    - mysqldata:

我输入了:

volumes:
    - mysqldata

docker-compose up给了我与上面相同的错误。

于 2018-04-23T10:52:07.763 回答
10

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

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

以下是选项:

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

    volumes:
       maria_volume: 
           external:
               name: volume-name
    
于 2017-03-08T21:08:53.357 回答
9

我自己刚刚解决了这个问题。如果您只想要一个卷来存储数据,请执行以下操作。这将创建/重用作为图形驱动程序volume的一部分持久化到磁盘的a。Docker

下一个问题是这是哪里?.

您可以在 docker 映像中找到它 - 默认位置 -

C:\Users\Public\Documents\Hyper-V\Virtual 硬盘

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

volumes:
  maria_volume:

当然,如果您是在将主机目录映射到 docker 之后,而不是将其放在Docker图形驱动程序中。然后你可以按如下方式进行。

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

请注意,当将主机目录映射为卷时(至少在 Windows 上),您可能会遇到read/write权限问题,这是我自己尚未解决的问题。

于 2019-05-09T17:16:29.523 回答
4

尝试这个:

    volumes:
        - maria_volume: /var/lib/mysql
volumes:
    maria_volume: 
        external:
            name: ~/mariadb
于 2016-12-27T06:59:47.073 回答
2

卷的正确语法是
volumes: first:
first 只是用于卷的占位符名称

于 2019-11-19T11:44:35.677 回答
1

试试这个,它对我有用

   volumes:
     - maria_volume: /var/lib/mysql

volumes:
  maria_volume: 
    drive: local
于 2021-03-17T12:28:23.960 回答
1

尝试这个:

version: '2'
services:
  ...
  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - ~/mariadb:/var/lib/mysql
于 2018-08-06T09:56:59.230 回答
0

我遇到了和你一样的问题,作为绝望的最后一幕,我试着把

volumes:
  - maria_volume: /var/lib/mysql

environment:
  MYSQL_ROOT_PASSWORD: example

我不确定这里应用了什么样的魔法,但就我而言,它有效

让我知道!

于 2016-12-27T13:40:56.853 回答
-1

对我来说,这有效:

在#docker_compose.yml 中:

volumes:
  postgres_data: {}
  static: { }
于 2017-11-25T13:54:45.117 回答