Соединение Symfony 4 в док-контейнере Mysql - PullRequest
0 голосов
/ 27 ноября 2018

Я использую docker для интерфейса 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:testpassword@127.0.0.1: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

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

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

DATABASE_URL=mysql://root:root@127.0.0.1:3306/dbname

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

DATABASE_URL=mysql://testuser:testpassword@127.0.0.1:3306/dbname

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

0 голосов
/ 27 ноября 2018

Вам необходимо предоставить порт базы данных, например,

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:testpassword@127.0.0.1:3306/dbname

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...