Почему docker не синхронизирует файлы внутри контейнера на Windows 10? - PullRequest
2 голосов
/ 04 февраля 2020

У меня проблема после последнего docker обновления (кажется так) на Windows 10 (локальная разработка). Когда я изменил файлы в PhpStorm (и в других редакторах - Sublime, Notepad +), через некоторое время файлы внутри контейнера не получили изменений.

Шаги, которые могут помочь на некоторое время:

  • Если я полностью закрою все контейнеры и после этого возникну их снова. docker-compose down && docker-compoes up
  • Если я попаду в контейнер php -fpm и для файла, который не изменился, запустится touch file.php (этот файл будет немедленно изменен).

То, что я пытался, и это не помогло:

  • Я перезапустил php -fpm и nginx контейнеры docker-compose restart php-fpm nginx (Да, это странно, потому что вниз | вверх для всех контейнеров помог)
  • Я изменил в настройках PhpStorm Использовать безопасную запись (сначала сохраните изменения для временного файла)

Также я проверил inode для файла внутри контейнера. С ls -lai file.php. До того, как изменения сработали, и после того, как они сломались, у меня был тот же номер инода Нет определенного количества изменений, которые я должен сделать, чтобы прервать синхронизацию, это случайно, иногда достаточно 2 изменений.

У меня есть:

Docker версия 19.03.5, сборка 633a0ea

docker -композитная версия 1.25.2, сборка 698e2846

docker -compose.yml

version: '3'
services:
    nginx:
        container_name: pr_kpi-nginx
        build:
            context: ./
            dockerfile: docker/nginx.docker
        volumes:
            - ./:/var/www/kpi
            - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
            - ./docker/nginx/fastcgi.conf:/etc/nginx/fastcgi.conf
        ports:
            - "8081:80"
        links:
            - php-fpm
        networks:
            - internal

    php-fpm:
        container_name: pr_kpi-php-fpm
        build:
            context: ./
            dockerfile: docker/php-fpm.docker
        volumes:
            - ./:/var/www/kpi
        links:
            - kpi-mysql
        environment:
            # 192.168.221.1 -> host.docker.internal for Mac and Windows
            XDEBUG_CONFIG: "remote_host=host.docker.internal remote_enable=1"
            PHP_IDE_CONFIG: "serverName=Docker"
        networks:
            - internal

    mailhog:
        container_name: pr_kpi-mailhog
        image: mailhog/mailhog
        restart: always
        ports:
            # smtp
            - "1025:1025"
            # http
            - "8025:8025"
        networks:
            - internal

    kpi-mysql:
        container_name: pr_kpi-kpi-mysql
        image: mysql:5.7
        command: mysqld --sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
        volumes:
            - ./docker/storage/kpi-mysql:/var/lib/mysql
        environment:
            # We must change prod secrets, this is not good approach
            - "MYSQL_ROOT_PASSWORD=pass"
            - "MYSQL_USER=user"
            - "MYSQL_PASSWORD=user_pass"
            - "MYSQL_DATABASE=kpi_db"
        ports:
            - "33061:3306"
        networks:
            - internal

    kpi-npm:
        container_name: pr_kpi-npm
        build:
            context: ./
            dockerfile: docker/npm.docker
        volumes:
            - ./:/var/www/kpi
            - /var/www/kpi/admin/node_modules
        ports:
            - "4200:4200"
        networks:
            - internal
        tty: true


# For xdebug
networks:
    internal:
        driver: bridge
        ipam:
            driver: default
            config:
                - subnet: 192.168.221.0/28

PS Открыта проблема: https://github.com/docker/for-win/issues/5530

PPS Нам нужно обновить Docker с 2.2.0.0 до 2.2.0.3, кажется, это исправлено

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

У меня есть отдельный контейнер для синхронизации моей папки:

app:
    image: httpd:2.4.38
    volumes:
        - ./:/var/www/html
    command: "echo true"

Я просто использую изображение basi c apache, хотя вы можете использовать что угодно. Затем в моих реальных контейнерах я использую следующую клавишу volumes_from:

awesome.scot:
    build: ./build/httpd
    links:
        - php
    ports:
        - 80:80
        - 443:443
    volumes_from:
        - app

php:
    build: ./build/php
    ports:
        - 9000
        - 9001
    volumes_from:
        - app
    links:
        - mariadb
        - mail
    environment:
        APPLICATION_ENV: 'development'

У меня никогда не было проблем с использованием этой настройки, файлы всегда синхронизируются c быстро, и я протестировал оба на Ма c OSX и MS Windows.

Если вам интересно, вот мой полный стек LAMP на Github https://github.com/delboy1978uk/lamp

0 голосов
/ 04 февраля 2020

У меня такая же проблема на Windows10 с 31 января. Я прокомментировал строку в PhpStorm и проверил ее в контейнере с помощью vim. Изменений не было. Если я запускаю docker -составляем вверх и вниз, изменения go в контейнере.

Docker версия 19.03.5, сборка 633a0ea docker -композитная версия 1.25.4, сборка 8d51620a

В моем docker -compose.yml ничего не изменилось с 2018 г. *

...