web-dev-qa-db-fra.com

Comment nommer un volume à l'aide d'un fichier docker-compose.yml?

Je connais Docker pour la première fois et j'essaie de savoir comment définir le nom du volume de données créé. Actuellement, le répertoire est automatiquement nommé comme un hachage long sous/var/libs/docker, ce qui est loin d’être convivial.

Je tente de configurer un environnement de développement pour MODX comme indiqué ci-dessous: https://github.com/modxcms/docker-modx

Actuellement, mon fichier docker-compose.yml est le suivant:

web:
  image: modx
  links:
    - db:mysql
  ports:
    - 80:80
db:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD: example
  ports:
    - 3306:3306
  command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION
myadmin:
  image: phpmyadmin/phpmyadmin
  links:
    - db:db
  ports:
    - 8080:8080

Cela fonctionne parfaitement, mais je ne sais pas comment nommer le volume de données que je modifierais directement avec mon IDE.

(En tant que question secondaire, doit-il être créé sous/var/libs/docker? Ou est-il possible de le définir dans un répertoire de mon dossier personnel?)

Update: Grâce à l'aide de @juliano, j'ai mis à jour mon fichier docker-compose.yml vers:

version: '2'

services:
    web:
      image: modx
      volumes: 
        - html:/home/muzzstick/dev/modxdev
      links:
        - db:mysql
      ports:
        - 80:80
    db:
      image: mysql
      environment:
        MYSQL_ROOT_PASSWORD: example
      ports:
        - 3306:3306
      command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION
    myadmin:
      image: phpmyadmin/phpmyadmin
      links:
        - db:db
      ports:
        - 8080:8080

volumes:
    html:
        external: false

Malheureusement, cela semble empêcher le conteneur Web de s'exécuter. db et les conteneurs myadmin indiquent qu'ils fonctionnent correctement . Il n'y a pas eu d'erreur ... si je tape docker start docker_web_1, il semble commencer, mais docker ps -a indique qu'il s'est arrêté dès qu'il a démarré.

Mise à jour 2

Lancer docker-compose up -d semble fonctionner sans problème. Mais comme vous pouvez le voir ci-dessous, le conteneur Web se ferme dès sa création.

    CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                     PORTS                            NAMES
a1dd6d8ac94e        modx                    "/entrypoint.sh apach"   10 seconds ago      Exited (1) 5 seconds ago                                    docker_web_1
ee812ae858dc        phpmyadmin/phpmyadmin   "/run.sh phpmyadmin"     10 seconds ago      Up 5 seconds               80/tcp, 0.0.0.0:8080->8080/tcp   docker_myadmin_1
db496134e0cf        mysql                   "docker-entrypoint.sh"   11 seconds ago      Up 10 seconds              0.0.0.0:3306->3306/tcp           docker_db_1

Update 3 OK, les journaux d'erreur de ce conteneur indiquent:

error: missing MODX_DB_Host and MYSQL_PORT_3306_TCP environment variables
Did you forget to --link some_mysql_container:mysql or set an external db
with -e MODX_DB_Host=hostname:port?

Cette erreur semble provenir de https://github.com/modxcms/docker-modx/blob/master/Apache/docker-entrypoint.sh#L15-L20

Cela pourrait-il être quelque chose comme si la liaison était gérée différemment dans docker-compose version 2?

6
Muzzstick

Pour créer un volume de données nommé à l’aide de la version 2 de la composition de fichiers vous aurez une zone séparée:

version: '2'

services:
  db:
    image: postgres
    volumes:
      - amazingvolume:/var/lib/postgresql/data

volumes:
  amazingvolume:
    external: true

Pour que vous puissiez définir le nom du volume (amazingvolume), s’il s’agit de external ou non et sous votre service (db dans cet exemple), vous pouvez définir le répertoire à monter.

9
Juliano Alves

Recherchez simplement dans la documentation de docker les volumes montés hébergés:

version: '2'

services:
  web:
    image: modx
    environment:
      - MYSQL_PORT_3306_TCP=3306
      - MODX_DB_Host=mysql:3306
    volumes: 
      - /home/muzzstick/dev/modxdev/html:/var/www/html

    links:
      - db:mysql
    ports:
      - 80:80
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example
    ports:
      - 3306:3306
    command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION
  myadmin:
    image: phpmyadmin/phpmyadmin
    links:
      - db:db
    ports:
      - 8080:8080

Remplacez /var/www/html par le répertoire où se trouveront les fichiers HTML dans le conteneur. Créez également le répertoire situé à gauche de votre hôte et accordez une autorisation de lecture à tous les utilisateurs. 

Cordialement 

1