首页 > 解决方案 > Docker with Symfony 4 - Unable to see the file changes

问题描述

I'm working on a docker image for dev environment for a Symfony 4 application. I'm building it on alpine, php-fpm and nginx.

I have configured an application, but the performance was not great (~700ms) even for the simple hello world application, so I thought I can make it faster somehow.

First of all, I went for semantics configuration and configured the volumes to use cached configuration. Then, I moved vendor to separate volume as it caused the most of performance issues.

As a second thing I wanted to use docker-sync as the benchmarks looked amazing. I configured it and everything ran smoothly. But now I realized that the docker is not reacting to changes in code.

First, I thought that it has something to do with Symfony 4 cache, so I did connect to php's container and ran php bin/console cache:clear. Cache has been cleared, but the docker did not react to anything. I double-check the files on both web and php containers and the files are changed there. I'm wondering if there is something more I need to configure or why is Symfony not reacting to changes.


UPDATE

Symfony/Container does not react to changes even after complete image re-build and removal of semantics configuration and docker-sync. So, basically, it's plain docker with hello-world symfony 4 application and it does not react to changes. Changes are not even synced with container


Configuration:

# 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 I use for running the app

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

标签: symfonydockerdocker-composesymfony4docker-volume

解决方案


I recommend to use dinghy instead docker4mac: https://github.com/codekitchen/dinghy Have a try to this repo for example too: https://github.com/jorge07/symfony-4-es-cqrs-boilerplate

If this doesn't work the problem will be in you host or dockerfile. Be sure you don't enable opcache for development.


推荐阅读