2016-06-13 4 views
0

J'ai eu du mal à relier deux conteneurs ensemble et on m'a conseillé de commencer à utiliser docker-composer. Je construire le fichier docker-Compose suivant:Comment gérer l'accès en écriture/lecture aux volumes de docker?

version: '2' 
services: 
    db: 
    image: mysql:latest 
    volumes: 
     - "./.data/db:/var/lib/mysql" 
    restart: always 
    environment: 
     MYSQL_ROOT_PASSWORD: my-pass 
     MYSQL_DATABASE: prestashop 
     MYSQL_USER: my-shop 
     MYSQL_PASSWORD: my-pass 

    prestashop: 
    depends_on: 
     - db 
    image: prestashop/prestashop:latest 
    volumes: 
     - "./.data/themes:/var/www/html/themes" 
     - "./.data/modules:/var/www/html/modules" 
     - "./.data/override:/var/www/html/override" 
    links: 
     - db 
    ports: 
     - "10083:80" 
    restart: always 
    environment: 
     DB_SERVER: db 
     DB_NAME: prestashop 
     DB_USER: my-shop 
     DB_PASSWD: my-pass 

Cela fonctionne très bien et si je visite la page via un proxy inverse nginx je reçois l'assistant d'installation initiale.

Mais si j'ajoute les volumes de données persistantes:

volumes: 
    - "./.data/themes:/var/www/html/themes" 
    - "./.data/modules:/var/www/html/modules" 
    - "./.data/override:/var/www/html/override" 

L'assistant se plaindra beaucoup un accès en lecture/écriture. Pourquoi est-ce? Les volumes internes ont déjà le bon chmod, je suppose? Donc, c'est seulement un problème de synchronisation je pense. Mais j'ai essayé de chmod ou chown les dossiers .data, mais sans aucun succès

+1

J'ai découvert que docker-compose mappe les volumes, mais parce que les dossiers sont créés, ils sont vides. Existe-t-il un moyen de synchroniser les données par défaut de var/www/html sur ma machine hôte? – user3411864

Répondre

2

J'ai résolu ce problème. Après docker-up composer -d Je l'ai fait copier les modules dossiers internes, des thèmes et passer outre à la machine hôte avec docker cp

Parce que Prestashop vérifie si tous les fichiers sont disponibles. Après la copie, vous pouvez exécuter la procédure d'installation de prestashop.