Как сбросить sql в докер для доктрины symfony

Я перешел на докер для своей среды разработки. Я использую 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"

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

Benyamin Limanto 15.02.2019 19:22

Проблема может быть связана с используемой базой данных. Не могли бы вы повторить envvar DATABASE_URL, который используется для подключения к базе данных? Вы можете сделать это, набрав echo $DATABASE_URL в своем терминале. Если это ничего не возвращает, проверьте значение в ваших env-файлах, начиная с .env.local, затем .env.dev или .env в зависимости от того, существуют ли они.

dbrumann 15.02.2019 19:27

Вы можете попробовать сгенерировать миграцию с помощью доктрины: migrates: diff и посмотреть на сгенерированный там SQL.

Stormnorm 15.02.2019 20:54

@dbruman У меня нет DATABASE_URL в моем файле env. просто у меня есть определение тома mysql в моем файле docker-compose.yml. это: /var/lib/mysql:/var/lib/mysql

Macsi 16.02.2019 12:12

Если у вас нет DATABASE_URL в вашем файле env, возможно, он хранится как переменная среды. Когда вы заходите в свой контейнер php-docker и запускаете echo $DATABASE_URL, что вы получаете? Если вы ничего не получите обратно, то это может быть проблемой. Для запуска команды требуется подключение к базе данных. Не могли бы вы опубликовать свой docker-compose.yml, это поможет объяснить, как передать URL-адрес базы данных в ваш php-контейнер, чтобы команда использовала правильное соединение.

dbrumann 16.02.2019 16:18

@dbrumann Разве .env (dotenv) не представлен в Symfony 4? Когда он использует Symfony 2.8, с моей точки зрения, у него нет файла .env...

rebru 16.02.2019 18:59

Вы правы, извините. Я пропустил эту часть, и, поскольку это была среда докеров, я просто предположил, что это проект 4.x. В таком случае, не могли бы вы проверить свои parameters.yml настройки базы данных и совпадают ли они с настройками вашей настройки docker-compose?

dbrumann 16.02.2019 21:13

@Stormnorm эта команда не работает в моей версии Symfony 2.8.49.

Macsi 17.02.2019 12:18

@dbrumann Я добавил в сообщение соответствующую часть параметров.yml и docker-compose.yml.

Macsi 17.02.2019 12:27

Настройки выглядят нормально. Вы вызываете команду из контейнера, то есть запускаете docker-compose exec symfony bash, а затем команду bin/console?

dbrumann 17.02.2019 14:44

У вас есть доступ к локальной папке /var/lib/mysql, к которой подключен том? Может быть, это проблема из-за прав доступа к файлам?

dbrumann 17.02.2019 14:45

@dbrumann да, я запускаю команду в контейнере symfony, я не использую docker-compose, я использую так: docker exec -it symfony_1 bash, и я захожу внутрь своего проекта

Macsi 17.02.2019 15:12

@dbrumann какое разрешение мне нужно дать? Да, я не могу сделать cd для каталога mysql, а также для папки с именем моей базы данных в /var/lib/mysql. Я изменил разрешения на 600, это не сработало, после того, как я изменил их на 777, все по-прежнему.

Macsi 17.02.2019 15:27

Попробуйте установить его в локальную папку внутри вашего проекта, например. если у вас есть подкаталог docker, я обычно делаю что-то вроде ./docker/mysql/data:/var/lib/mysql, а затем помещаю папку данных в свой .gitignore. По крайней мере, в Windows Docker разрешен доступ только к определенному каталогу, например к вашей домашней папке, и я предполагаю, что он похож на Linx / Mac, но никогда не изучал его больше.

dbrumann 17.02.2019 16:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
14
725
0

Другие вопросы по теме