Php 为什么docker不在Windows 10上同步容器内的文件?
在Windows10(本地开发)上的上次docker更新(似乎如此)后,我遇到了问题。当我在PhpStorm中(以及在另一个编辑器-Sublime,Notepad+)中更改文件时,过了一段时间,容器中的文件并没有收到更改 可以暂时帮助您的步骤:Php 为什么docker不在Windows 10上同步容器内的文件?,php,windows,docker,nginx,phpstorm,Php,Windows,Docker,Nginx,Phpstorm,在Windows10(本地开发)上的上次docker更新(似乎如此)后,我遇到了问题。当我在PhpStorm中(以及在另一个编辑器-Sublime,Notepad+)中更改文件时,过了一段时间,容器中的文件并没有收到更改 可以暂时帮助您的步骤: 如果我完全关闭所有容器,然后再次启动它们docker compose down和docker compose up 如果我进入php fpm容器,对于未更改的文件运行触摸file.php(此文件将立即更改) 我尝试了什么,但没用: 我重新启动了ph
- 如果我完全关闭所有容器,然后再次启动它们<代码>docker compose down和docker compose up
- 如果我进入php fpm容器,对于未更改的文件运行
(此文件将立即更改)触摸file.php
- 我重新启动了php-fpm和nginx容器
(是的,这很奇怪,因为关闭了所有容器)docker-compose重新启动php-fpm-nginx
- 我在PhpStorm设置中更改了使用安全写入(先保存临时文件的更改)
ls-lai file.php
。在更改生效之前和中断之后,我有相同的inode编号。为了打破同步,我必须做的更改并没有确定的数量,这是随机的,有时两个更改就足够了
我有:
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
另外,还有一个公开发行的:
p.p.S.我们需要将Docker从2.2.0.0更新到2.2.0.3,似乎已经修复了自1月31日起,我在Windows10上也有同样的问题。
我已经在PhpStorm中注释了一行,并使用vim在容器中检查了它。 这些变化并不存在。
如果我上下运行docker compose,更改将进入容器 Docker版本19.03.5,内部版本633a0ea
docker compose版本1.25.4,内部版本8d51620a
自2018年以来,我的docker-compose.yml没有任何更改。我有一个单独的容器用于同步我的文件夹:
app:
image: httpd:2.4.38
volumes:
- ./:/var/www/html
command: "echo true"
我只使用基本的apache映像,但是您可以使用任何东西。然后在我的实际容器中,我使用以下volumes\u 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堆栈请添加您的docker compose。yml@RiWedocker compose被添加到docker-compose.yml对我来说很好。有同样的问题。想知道主机上的睡眠是否会触发它。触摸有时会修复它。重新启动docker desktop无法解决此问题。可能与此问题相关: