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

Ric*_*ard 20 wordpress docker-compose docker-volume

为什么我会收到此错误? __CODE__

我的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
Run Code Online (Sandbox Code Playgroud)

Jon*_*lis 9

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

下一个问题是这哪里?.

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

C:\Users\Public\Documents\Hyper-V\虚拟硬盘

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

volumes:
  maria_volume:
Run Code Online (Sandbox Code Playgroud)

当然,如果您将主机目录映射到 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
Run Code Online (Sandbox Code Playgroud)

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


Dhi*_*pta 7

就我而言,这是因为我错过了:在卷名后面添加a的缘故。

代替:

volumes:
    - mysqldata:
Run Code Online (Sandbox Code Playgroud)

我输入了:

volumes:
    - mysqldata
Run Code Online (Sandbox Code Playgroud)

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


DaN*_*eSh 6

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

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

以下是选项:

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

    volumes:
       maria_volume: 
           external:
               name: volume-name
    
    Run Code Online (Sandbox Code Playgroud)


小智 5

尝试这个:

    volumes:
        - maria_volume: /var/lib/mysql
volumes:
    maria_volume: 
        external:
            name: ~/mariadb
Run Code Online (Sandbox Code Playgroud)