Подключение Symfony 4 к контейнеру докеров Mysql

Я использую докер для интерфейса MySql и Adminer, соединение между Adminer и MySql работает, но соединение Symfony отклонено. Symfony не находится в контейнере.

Что я могу сделать, чтобы соединение между Symfony 4 и контейнером MySql работало?

это мой docker-compose.yml:

version: '3'
services:

  mysql:
    image: mysql:5.7
    volumes:
    - ./data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: "rootpwd"
      MYSQL_USER: 'testuser'
      MYSQL_PASSWORD: 'testpassword'

  adminer:
    image: adminer
    restart: always
    ports:
    - 8080:8080
    links:
      - mysql:db

volumes:
  mysql:

мой .env на Symfony 4:

# This file defines all environment variables that the application needs.
# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE.
# Use ".env.local" for local overrides during development.
# Use real environment variables when deploying to production.
# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration

###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=825aa371242c34bdcc0c693ac4241bcf
#TRUSTED_PROXIES=127.0.0.1,127.0.0.2
#TRUSTED_HOSTS='^localhost|example\.com$'
###< symfony/framework-bundle ###

###> doctrine/doctrine-bundle ###
# Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
# Configure your db driver and server_version in config/packages/doctrine.yaml
DATABASE_URL=mysql://testuser:[email protected]:3306/dbname

###< doctrine/doctrine-bundle ###

и мой doctrine.yml:

parameters:
    # Adds a fallback DATABASE_URL if the env var is not set.
    # This allows you to run cache:warmup even if your
    # environment variables are not available yet.
    # You should not need to change this value.
    #env(DATABASE_URL): ''

doctrine:
    dbal:
        # configure these for your database server
        driver: 'pdo_mysql'
        server_version: '5.7'
        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci

        url: '%env(resolve:DATABASE_URL)%'
        unix_socket: /tmp/mysql.sock
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true

        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

ОБНОВИТЬ


Что ж, спасибо за помощь, все работает, Symfony или, в частности, doctrine не нашли контейнер, как вы сказали, я открыл порт Mysql, но мне нужно сделать другое изменение: Эта строка работает для меня:

DATABASE_URL=mysql://root:[email protected]:3306/dbname

а не эта строка:

DATABASE_URL=mysql://testuser:[email protected]:3306/dbname

На самом деле кажется, что моя docker-compose up не очень хорошо работает и работает со старой версией, docker не «видит» мои изменения в docker-compose.yml, поэтому пароль и пользователь остаются «root». Я собираюсь попробовать это: https://forums.docker.com/t/how-to-delete-cache/5753/2 и это: https://github.com/docker/compose/issues/1487

Иногда необходимо удалить базу данных => Предупреждение: переменные, специфичные для Docker, будут иметь эффект только в том случае, если вы запустите контейнер с пустым каталогом данных; любая уже существующая база данных останется нетронутой при запуске контейнера. https://hub.docker.com/_/postgres/

Возможный дубликат Symfony не может подключиться к контейнеру MySQL Docker

Cid 27.11.2018 15:07

@Cid, а не дубликат. Следовательно, часть, где OP упоминает, что symfony НЕ находится в докере. Это меняет всю суть проблемы.

Sven Hakvoort 27.11.2018 15:08

И @cisco_bro, есть ли конкретная причина, по которой ваша Symfony не находится в докере?

Sven Hakvoort 27.11.2018 15:09

@SvenHakvoort, я стараюсь иметь самую простую конфигурацию, я уже пытаюсь использовать Symfony в контейнере, но столкнулся с той же проблемой.

cisco_bro 27.11.2018 15:24

@cisco_bro Возможно, ваше имя пользователя и пароль должны быть URL закодирован, если они содержат специальные символы.

Cid 27.11.2018 16:13

@Cid Да, но я использую "url: '% env (resolve: DATABASE_URL)%'"

cisco_bro 27.11.2018 16:50

@cisco_bro Я объявляю все (имя хоста, имя базы данных, имя пользователя, пароль и так далее ...) в doctrine.yml. (и это должно быть в том случае, когда ваш сайт будет в рабочем состоянии, без .env для prod)

Cid 27.11.2018 17:21

Это из-за сопоставления: utf8mb4_unicode_ci. Я работаю над некоторыми проектами. Я сталкиваюсь с этой проблемой, когда использую сопоставление: utf8mb4_unicode_ci, но если я изменяю сопоставление: utf8_genral_ci, он начинает принимать запрос на подключение

Sachin Bankar 25.08.2020 05:44
Стоит ли изучать 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 и хотите разрабатывать...
7
8
5 150
1

Ответы 1

Вам нужно открыть порт базы данных, например.

version: '3'
services:

  mysql:
    image: mysql:5.7
    volumes:
    - ./data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: "rootpwd"
      MYSQL_USER: 'testuser'
      MYSQL_PASSWORD: 'testpassword'
    ports:
        - 3306:3306
  adminer:
    image: adminer
    restart: always
    ports:
    - 8080:8080
    links:
      - mysql:db

volumes:
  mysql:

а затем в файле .env

DATABASE_URL=mysql://testuser:[email protected]:3306/dbname

Убедитесь, что IP-адрес совпадает с IP-адресом вашего докер-хоста.

Я открыл порт, и теперь у меня есть журнал докеров: mysql_1_5d6024a6800d | 2018-11-27T15: 10: 55.985191Z 2 [Примечание] Доступ запрещен для пользователя 'testuser'@'172.45.0.1' (с использованием пароля: ДА) Похоже, моя конфигурация среды на docker-compose.yml не работает

cisco_bro 27.11.2018 16:16

Теперь проблема с вашей учетной записью mysql, а не с докером. Вам необходимо разрешить удаленный доступ для вашего пользователя mysql

breq 27.11.2018 20:32

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