webentwicklung-frage-antwort-db.com.de

FEHLER: In der Datei './docker-compose.yml' muss das Volume eine Zuordnung und keine Zeichenfolge sein

Warum erhalte ich diesen Fehler? ERROR: In file './docker-compose.yml', volume 'mariavolume' must be a mapping not a string.

Meine Docker-Compose-Datei ist fast identisch mit dieser: 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
8
Richard

Leider gibt es keine solche Funktion.

Sie können in Docker-Compose keine Top-Level-Volumes zuordnen.

Hier sind die Optionen:

  • Volumen pro Container hinzufügen und dort zuordnen. (wie das, was Daniel tat hier )
  • Erstellen Sie ein Volume außerhalb der Zusammenstellung (mit Zuordnung) und verwenden Sie es in Ihrer Zusammenstellung.

    volumes:
       maria_volume: 
           external:
               name: volume-name
    
6
DaNeSh

In meinem Fall war dies der Fall, weil ich es versäumt habe, einen : nach dem Volume-Namen hinzuzufügen.

Anstatt:

volumes:
    - mysqldata:

Ich hatte geschrieben:

volumes:
    - mysqldata

docker-compose up gab mir den gleichen Fehler wie oben.

3
Dhiraj Gupta

versuche dies:

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

Für mich funktioniert das:

In # docker_compose.yml:

volumes:
  postgres_data: {}
  static: { }
0
Deepak Sharma

Versuche dies:

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

Ich habe dieses Problem gerade selbst angegangen. Wenn Sie nur möchten, dass ein Volume Daten speichert, gehen Sie wie folgt vor. Dadurch wird ein Volume erstellt/wiederverwendet, das als Teil des Docker-Grafiktreibers auf der Festplatte verbleibt. Die nächste Frage ist, wo das ist. Sie finden es im Docker-Bild - Standardspeicherort - 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:

Natürlich, wenn Sie ein Host-Verzeichnis dem Docker zuordnen, anstatt es im Docker-Grafiktreiber zu haben. Dann können Sie es wie folgt tun.

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

Beachten Sie, dass beim Zuordnen über Host-Verzeichnisse als Volume (zumindest unter Windows) Probleme mit Lese-/Schreibberechtigungen auftreten können, die ich selbst noch nicht gelöst habe.

0
JonWillis

Ich habe das gleiche Thema wie Sie selbst getroffen und als letzten Verzweiflungsversuch habe ich versucht zu setzen

volumes:
  - maria_volume: /var/lib/mysql

vor

environment:
  MYSQL_ROOT_PASSWORD: example

Ich bin mir nicht sicher, welche Art von Magie hier angewendet wurde, aber in meinem Fall hat es funktioniert

Gib mir Bescheid!

0
Daniel