Я перешел на докер для своей среды разработки. Я использую symfony 2.8.49, mysql в докере.
До того, как я перешел на докер, я смог увидеть только нужный дамп с этим кодом. Это не сбрасывало всю базу данных sql-запросов. Он просто сбрасывал новые объекты или функции, такие как новые столбцы. (который не является существующей таблицей или столбцами или внешним ключом.)
php app/console doctrine:schema:update --dump-sql
Сегодня, когда я использую эту же команду в докере symfony, она сбрасывает все, даже существующую таблицу, столбцы или внешний ключ.
Это слишком грязно, и мне нужен четкий результат в докере без использования grep.
параметры.yml
parameters:
database.host: mysql
database.port: 3306
database.name: *name
database.user: *user
database.password: password
докер-compose.yml
mysql:
build: ./docker/mysql
volumes:
- /var/lib/mysql:/var/lib/mysql
networks:
main:
aliases:
- mysql
докер-compose.override.yml
symfony:
build:
context: ./docker/symfony-alpine
dockerfile: Dockerfile
extra_hosts:
- "my.local:0.0.0.0"
ports:
- "8080:80"
environment:
- ENABLE_XDEBUG=1
- XDEBUG_CONFIG=remote_host=192.168.0.109
- PHP_IDE_CONFIG=serverName=symfony
mysql:
ports:
- "3307:3306"
Проблема может быть связана с используемой базой данных. Не могли бы вы повторить envvar DATABASE_URL, который используется для подключения к базе данных? Вы можете сделать это, набрав echo $DATABASE_URL в своем терминале. Если это ничего не возвращает, проверьте значение в ваших env-файлах, начиная с .env.local, затем .env.dev или .env в зависимости от того, существуют ли они.
Вы можете попробовать сгенерировать миграцию с помощью доктрины: migrates: diff и посмотреть на сгенерированный там SQL.
@dbruman У меня нет DATABASE_URL в моем файле env. просто у меня есть определение тома mysql в моем файле docker-compose.yml. это: /var/lib/mysql:/var/lib/mysql
Если у вас нет DATABASE_URL в вашем файле env, возможно, он хранится как переменная среды. Когда вы заходите в свой контейнер php-docker и запускаете echo $DATABASE_URL, что вы получаете? Если вы ничего не получите обратно, то это может быть проблемой. Для запуска команды требуется подключение к базе данных. Не могли бы вы опубликовать свой docker-compose.yml, это поможет объяснить, как передать URL-адрес базы данных в ваш php-контейнер, чтобы команда использовала правильное соединение.
@dbrumann Разве .env (dotenv) не представлен в Symfony 4? Когда он использует Symfony 2.8, с моей точки зрения, у него нет файла .env...
Вы правы, извините. Я пропустил эту часть, и, поскольку это была среда докеров, я просто предположил, что это проект 4.x. В таком случае, не могли бы вы проверить свои parameters.yml настройки базы данных и совпадают ли они с настройками вашей настройки docker-compose?
@Stormnorm эта команда не работает в моей версии Symfony 2.8.49.
@dbrumann Я добавил в сообщение соответствующую часть параметров.yml и docker-compose.yml.
Настройки выглядят нормально. Вы вызываете команду из контейнера, то есть запускаете docker-compose exec symfony bash, а затем команду bin/console?
У вас есть доступ к локальной папке /var/lib/mysql, к которой подключен том? Может быть, это проблема из-за прав доступа к файлам?
@dbrumann да, я запускаю команду в контейнере symfony, я не использую docker-compose, я использую так: docker exec -it symfony_1 bash, и я захожу внутрь своего проекта
@dbrumann какое разрешение мне нужно дать? Да, я не могу сделать cd для каталога mysql, а также для папки с именем моей базы данных в /var/lib/mysql. Я изменил разрешения на 600, это не сработало, после того, как я изменил их на 777, все по-прежнему.
Попробуйте установить его в локальную папку внутри вашего проекта, например. если у вас есть подкаталог docker, я обычно делаю что-то вроде ./docker/mysql/data:/var/lib/mysql, а затем помещаю папку данных в свой .gitignore. По крайней мере, в Windows Docker разрешен доступ только к определенному каталогу, например к вашей домашней папке, и я предполагаю, что он похож на Linx / Mac, но никогда не изучал его больше.






Затем вам следует проконсультироваться с сопровождающим докера. В любом случае это не проблема PHP.