【问题标题】:Why docker not syncing files inside container on Windows 10?为什么 docker 不同步 Windows 10 上容器内的文件?
【发布时间】:2020-02-12 15:57:07
【问题描述】:

在 Windows 10(本地开发)上的最后一次 docker 更新(似乎是这样)后我遇到了问题。当我在 PhpStorm(以及其他编辑器 - Sublime、Notepad+)中更改文件时,过了一会儿,容器内的文件没有收到更改。

暂时有帮助的步骤:

  • 如果我完全关闭所有容器,然后再次启动它们。 docker-compose down && docker-compoes up
  • 如果我进入 php-fpm 容器并且对于未更改的文件运行 touch file.php(此文件将立即更改)。

我尝试过但没有帮助:

  • 我重新启动了 php-fpm 和 nginx 容器 docker-compose restart php-fpm nginx(是的,这很奇怪,因为所有容器的 down|up 都有帮助)
  • 我在 PhpStorm 设置中进行了更改使用安全写入(首先保存临时文件的更改)

我还检查了容器内的文件的 inode。与ls -lai file.php。在更改生效之前和损坏之后,我拥有相同的 inode 编号。没有确定我必须做多少更改才能中断同步,它是随机的,有时 2 次更改就足够了。

我有:

Docker 版本 19.03.5,内部版本 633a0ea

docker-compose 版本 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

附:有未解决的问题: https://github.com/docker/for-win/issues/5530

附言我们需要将 Docker 从 2.2.0.0 更新到 2.2.0.3,似乎已经修复了

【问题讨论】:

  • 请添加您的 docker-compose.yml
  • @RiWe docker-compose 已添加
  • docker-compose.yml 对我来说看起来不错。
  • 有同样的问题。想知道主机上的睡眠是否会触发它。触摸有时会修复它。重新启动 docker 桌面并没有解决它。
  • 可能和这个有关:github.com/docker/for-win/issues/5530

标签: php windows docker nginx phpstorm


【解决方案1】:

我有一个单独的容器用于同步我的文件夹:

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

我只使用基本的 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'

我在使用此设置时从未遇到过问题,文件总是快速同步,而且我已经在 Mac OSX 和 MS Windows 上进行了测试。

如果你有兴趣,这里是我在 Github 上的完整 LAMP 堆栈https://github.com/delboy1978uk/lamp

【讨论】:

    【解决方案2】:

    自 1 月 31 日以来,我在 Windows10 上遇到了同样的问题。
    我在 PhpStorm 中注释了一行,并使用 vim 在容器中检查了它。 更改不存在。
    如果我上下运行 docker-compose,更改会进入容器。

    Docker 版本 19.03.5,构建 633a0ea
    docker-compose 版本 1.25.4,构建 8d51620a

    自 2018 年以来,我的 docker-compose.yml 没有任何变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多