簡體   English   中英

錯誤:在文件“./docker-compose.yml”中,卷必須是映射而不是字符串

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

問題:為什么會出現此錯誤?

錯誤:在文件“./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

在我的情況下,發生這種情況是因為我錯過了在卷名后添加:

代替:

volumes:
    - mysqldata:

我輸入了:

volumes:
    - mysqldata

docker-compose up給了我與上面相同的錯誤。

不幸的是,沒有這樣的功能。

您無法在 docker-compose 中映射頂級卷。

以下是選項:

  • 添加每個容器的卷並將其映射到那里。 (就像丹尼爾在這里所做的那樣)
  • 在撰寫之外創建一個卷(帶映射)並在你的撰寫中使用它。

     volumes: maria_volume: external: name: volume-name

我剛剛自己解決了這個問題。 如果您只是想要一個卷來存儲數據,請執行以下操作。 這將創建/重用作為Docker圖形驅動程序的一部分持久保存到磁盤的volume

下一個問題是這哪里? .

您可以在 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:

當然,如果您將主機目錄映射到 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權限問題,這是我自己尚未解決的問題。

嘗試這個:

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

卷的正確語法是
volumes: first:
其中 first 只是用於音量的占位符名稱

嘗試這個:

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

我遇到了和你一樣的問題,作為最后的絕望行為,我試着把

volumes:
  - maria_volume: /var/lib/mysql

environment:
  MYSQL_ROOT_PASSWORD: example

我不確定這里應用了什么樣的魔法,但就我而言,它奏效了

讓我知道!

試試這個,它對我有用

   volumes:
     - maria_volume: /var/lib/mysql

volumes:
  maria_volume: 
    drive: local

對我來說這有效:

在#docker_compose.yml 中:

volumes:
  postgres_data: {}
  static: { }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM