Проблема с доктриной и докером - PullRequest
0 голосов
/ 21 января 2019

У меня возникла проблема при создании базы данных с использованием Doctrine (migration:migrate). Я получил эту ошибку:

Такой хост не известен

Проблема решена при использовании localhost:3306 вместо db, но у меня возникла проблема при отправке запроса с сервисом REST.

Резюме: использование localhost:3306 - migration:migrate работает, а служба REST не работает, использование db --igration.migrate не работает и служба REST работает. Это мои настройки:

.env

    ###> 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://user:pass@db/db_name
    ###< doctrine/doctrine-bundle ###

докер-compose.yml

version: "2"
services:

  db:
    image: mysql:5.7
    container_name: db_container
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=123
      - MYSQL_DATABASE=db_name
      - MYSQL_USER=user
      - MYSQL_PASSWORD=pass
    volumes:
      - ./mysql/data:/var/lib/mysql:rw
    ports:
      - 3306:3306

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin_container
    links:
      - db:db
    ports:
      - 8081:80

  webserver:
    image: nginx:alpine
    container_name: symfony-webserver
    volumes:
      - ./symfony:/var/www/html
      - ./docker/nginx/site.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8082:80
    depends_on:
      - php-fpm

  php-fpm:
    build: docker/php-fpm
    container_name: symfony-php-fpm
    volumes:
      - ./symfony:/var/www/html
      - ./docker/php-fpm/php-ini-overrides.ini:/etc/php/7.0/fpm/conf.d/99-overrides.ini
    links:
      - db

doctrine.yaml

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)%'
    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

1 Ответ

0 голосов
/ 21 января 2019

Все команды должны выполняться внутри контейнера.

, чтобы попасть в контейнер fpm, вы можете запустить docker-compose exec -it php-fpm bash (или ash в зависимости от того, используете ли вы базовый образ debian или alpine)

-> в этой оболочке вы можете выполнить доктрину bin / console: команда migrate

...