簡體   English   中英

為什么 docker 在 Windows 10 上不同步容器內的文件?

[英]Why docker not syncing files inside container on Windows 10?

我在 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 設置中更改了 Use Safe write(先保存臨時文件的更改)

我還檢查了容器內文件的 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

PS 有open issue: https : //github.com/docker/for-win/issues/5530

PPS 我們需要將 Docker 從 2.2.0.0 更新到 2.2.0.3,似乎已修復

我有一個單獨的容器用於同步我的文件夾:

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

自 1 月 31 日以來,我在 Windows10 上遇到了同樣的問題。
我在 PhpStorm 中注釋了一行,並使用 vim 在容器中檢查了它。 變化並不存在。
如果我上下運行 docker-compose,更改會在容器中進行。

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

自 2018 年以來,我的 docker-compose.yml 中沒有任何變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM