2 votes

Le volume Docker n'est pas un répertoire entièrement synchronisé pour un seul conteneur

J'ai créé un projet simple pour Symfony4 basé sur php7.3+mariadb via docker-compose. J'ai utilisé Docker pour Windows 10 (x64). Cela fonctionne correctement sur une machine mais sur l'ordinateur portable, il ne se synchronise pas correctement avec le conteneur.

Dans le dossier Root, j'ai la structure standard de Symfony avec des fichiers docker comme : - /config - /public - /src .... - /env - /docker - .env - docker-compose.yaml ...

Mes actions dans Git Bash pour démarrer l'application :

  1. construction de docker-compose
    • il fonctionne correctement, toutes les actions ont été terminées avec succès
  2. docker-compose up -d
    • il fonctionne correctement, les deux conteneurs s'exécutent avec succès
  3. docker-compose exec app bash
    • fonctionne correctement, la console démarre
  4. ls
    • le résultat est docker env
    • il ne synchronise que 2 répertoires - docker et env.
    • docker dir n'a pas été synchronisé en mode complet - seulement la structure des sous-répertoires sans les fichiers

J'ai essayé de détecter la raison du problème de synchronisation des fichiers, mais je n'ai pas assez de connaissances et d'expérience avec Docker. Les journaux de docker-compose ne contiennent aucune erreur.

Peut-être que quelqu'un peut aider à détecter la raison ? Il démarre une fois, mais après le redémarrage, le problème se reproduit...

docker-compose.yaml :

version: '3'

services:
    app:
        restart: unless-stopped
        build:
            context: .
            dockerfile: docker/webserver-apache/Dockerfile
        image: php:7.3.1-apache-stretch
        volumes:
            - "./docker/webserver-apache/sites-enabled:/etc/apache2/sites-enabled:ro"
            - "./:/var/www/html"
        ports:
            - 8080:80
        networks:
            - dphptrainnet

    mariadb:
        restart: unless-stopped
        image: mariadb:10.4.1
        networks:
            - dphptrainnet
        volumes:
            - ./env/mariadb/data:/var/lib/mysql            
        ports:
            - 3306:3306
        environment:
            MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}

networks:
    dphptrainnet:

Dockerfile :

FROM php:7.3.1-apache-stretch

# Setting up constants for an environment
ENV PHP_MEMORY_LIMIT    512M

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
    php composer-setup.php && \
    php -r "unlink('composer-setup.php');" && \
    mv composer.phar /usr/local/bin/composer

RUN apt-get update && \ 
    apt-get install -y curl vim git zip unzip

# Setting up httpd issues
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
RUN a2enmod rewrite headers && /etc/init.d/apache2 restart
RUN echo "127.0.0.1     dockertrain.local" >> /etc/hosts

WORKDIR "/var/www/html"

RUN a2enmod rewrite

1voto

Evgeniy Points 31

Je n'ai trouvé qu'une seule solution qui fonctionne : le partage du lecteur pour Docker : 1. Désactiver le disque partagé, cliquer sur Appliquer 2. Activez le disque partagé, cliquez sur Appliquer 3. Redémarrez l'application - les fichiers ont été synchronisés

Mais comment détecter un quelconque problème d'accès au disque ? Pas d'erreurs, pas de journaux....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X