Docker 使用 Symfony 4 - 无法看到文件更改
Docker with Symfony 4 - Unable to see the file changes
我正在为 Symfony 4 应用程序的开发环境制作 docker 图像。我正在 alpine
、php-fpm
和 nginx
上构建它。
我已经配置了一个应用程序,但即使对于简单的 hello world 应用程序,性能也不是很好 (~700ms),所以我想我可以通过某种方式让它更快。
首先,我进行了语义配置并将卷配置为使用 cached
配置。然后,我将 vendor
移动到单独的卷,因为它导致了大部分性能问题。
作为第二件事,我想使用 docker-sync
,因为基准测试看起来很棒。我配置它和一切 运行 顺利。但现在我意识到 docker 没有对代码的变化做出反应。
首先,我认为它与 Symfony 4 缓存有关,所以我确实连接到 php
的容器和 运行 php bin/console cache:clear
。缓存已被清除,但 docker 没有任何反应。我仔细检查了 web
和 php
容器上的文件,文件在那里发生了变化。我想知道是否还有其他需要配置的东西,或者为什么 Symfony 没有对更改做出反应。
更新
Symfony/Container 不会对更改做出反应,即使在完成图像重建和删除语义配置后也是如此 docker-sync
。所以,基本上,hello-world symfony 4 应用程序很简单 docker 并且它不会对更改做出反应。 更改甚至不与容器同步
配置:
# docker-compose-dev.yml
version: '3'
volumes:
symfony-sync:
external: true
services:
php:
build: build/php
expose:
- 9000
volumes:
- symfony-sync:/var/www/html/symfony
- ./vendor:/var/www/html/vendor
web:
build: build/nginx
restart: always
expose:
- 80
- 443
ports:
- 8080:80
- 8081:443
depends_on:
- php
volumes:
- symfony-sync:/var/www/html/symfony
- ./vendor:/var/www/html/vendor
networks:
default:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.4.0.0/16
# docker-sync.yml
version: "2"
options:
verbose: true
syncs:
symfony-sync:
src: './symfony'
sync_excludes:
- '.git'
- 'composer.lock'
我用于 运行 应用程序的 Makefile
start:
docker-sync stop
docker-sync clean
cd symfony
docker volume create --name=symfony-sync
cd ..
docker-compose -f docker-compose-dev.yml down
docker-compose -f docker-compose-dev.yml up -d
docker-sync start
stop:
docker-compose stop
docker-sync stop
我建议使用小艇代替 docker4mac:https://github.com/codekitchen/dinghy
也可以试试这个 repo:https://github.com/jorge07/symfony-4-es-cqrs-boilerplate
如果这不起作用,问题将出在您的主机或 dockerfile 中。请确保您没有为开发启用 opcache。
我正在为 Symfony 4 应用程序的开发环境制作 docker 图像。我正在 alpine
、php-fpm
和 nginx
上构建它。
我已经配置了一个应用程序,但即使对于简单的 hello world 应用程序,性能也不是很好 (~700ms),所以我想我可以通过某种方式让它更快。
首先,我进行了语义配置并将卷配置为使用 cached
配置。然后,我将 vendor
移动到单独的卷,因为它导致了大部分性能问题。
作为第二件事,我想使用 docker-sync
,因为基准测试看起来很棒。我配置它和一切 运行 顺利。但现在我意识到 docker 没有对代码的变化做出反应。
首先,我认为它与 Symfony 4 缓存有关,所以我确实连接到 php
的容器和 运行 php bin/console cache:clear
。缓存已被清除,但 docker 没有任何反应。我仔细检查了 web
和 php
容器上的文件,文件在那里发生了变化。我想知道是否还有其他需要配置的东西,或者为什么 Symfony 没有对更改做出反应。
更新
Symfony/Container 不会对更改做出反应,即使在完成图像重建和删除语义配置后也是如此 docker-sync
。所以,基本上,hello-world symfony 4 应用程序很简单 docker 并且它不会对更改做出反应。 更改甚至不与容器同步
配置:
# docker-compose-dev.yml
version: '3'
volumes:
symfony-sync:
external: true
services:
php:
build: build/php
expose:
- 9000
volumes:
- symfony-sync:/var/www/html/symfony
- ./vendor:/var/www/html/vendor
web:
build: build/nginx
restart: always
expose:
- 80
- 443
ports:
- 8080:80
- 8081:443
depends_on:
- php
volumes:
- symfony-sync:/var/www/html/symfony
- ./vendor:/var/www/html/vendor
networks:
default:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.4.0.0/16
# docker-sync.yml
version: "2"
options:
verbose: true
syncs:
symfony-sync:
src: './symfony'
sync_excludes:
- '.git'
- 'composer.lock'
我用于 运行 应用程序的 Makefile
start:
docker-sync stop
docker-sync clean
cd symfony
docker volume create --name=symfony-sync
cd ..
docker-compose -f docker-compose-dev.yml down
docker-compose -f docker-compose-dev.yml up -d
docker-sync start
stop:
docker-compose stop
docker-sync stop
我建议使用小艇代替 docker4mac:https://github.com/codekitchen/dinghy 也可以试试这个 repo:https://github.com/jorge07/symfony-4-es-cqrs-boilerplate
如果这不起作用,问题将出在您的主机或 dockerfile 中。请确保您没有为开发启用 opcache。