Что послужило причиной возникновения ошибки «database «yii2_db» does not exist»?

Здравствуйте! У меня есть проект на PHP, который работает в Docker. Вот как выглядит файл docker-compose: <br/> <pre><code>services:
  web:
    #container_name: web
    build:
      context: ./
      dockerfile: ./docker/Dockerfile
    environment:
      XDEBUG_CONFIG: remote_host=host.docker.internal
      PHP_IDE_CONFIG: serverName=localhost
    ports:
      - 80:80
    volumes:
      - ./:/var/www
    links:
      - db
    depends_on:
      - db
  db:
    #container_name: postgres
    image: 'postgres:13.11'
    ports:
      - 5432:5432
    environment:
      PGDATA: /var/lib/postgresql/data/pgdata
      POSTGRES_DB: yii2_db
      POSTGRES_USER: postgres
      USER: postgres
      POSTGRES_PASSWORD: password
    healthcheck:
      test: pg_isready -U $$POSTGRES_USER
    volumes:
      - .docker/pgdata:/var/lib/postgresql-13/data/pgdata
  redis:
    image: redis:5-alpine
    ports:
      - 6379:6379
    volumes:
      - ./docker/data/redis:/data</code></pre> <br/> Сам проект основан на Yii2. Конфигурация подключения к базе данных выглядит следующим образом: <br/> <pre><code class="php">'db' =&gt; [
            'class' =&gt; 'yii\db\Connection',
            'dsn' =&gt; 'pgsql:host=db;dbname=yii2_db',
            'username' =&gt; 'postgres',
            'password' =&gt; 'password',
            'charset' =&gt; 'utf8',
            'enableSchemaCache' =&gt; 1,
            'schemaCacheDuration' =&gt; 10,
            'attributes' =&gt; [
                PDO::ATTR_PERSISTENT =&gt; true
            ]
        ],</code></pre> <br/> <br/> Когда я открываю сайт, подключение к базе данных работает корректно, и запросы выполняются без проблем. Я также использую PHPStorm для подключения к базе данных. Однако на сегодняшний день возникла проблема с подключением...
  • 4 февраля 2025 г. 18:54
Ответы на вопрос 1
Ошибка "database «yii2_db» does not exist" означает, что приложение не может найти базу данных с именем `yii2_db`. В вашем случае это может происходить по нескольким причинам:

1. **База данных еще не создана**: При первом запуске контейнера базы данных Postgres может не быть создана база данных `yii2_db`. Проверьте, создалась ли база данных. Вы можете подключиться к контейнеру базы данных и выполнить команду для просмотра существующих баз данных:
   ```bash
   docker exec -it <имя_контейнера_db> psql -U postgres -c '\l'
   ```

2. **Проблема с подключением к базе данных**: Иногда контейнер вашего приложения может попытаться подключиться к базе данных до того, как сам контейнер с базой данных полностью инициализируется и будет готов к работе. Хотя вы используете `depends_on`, это лишь гарантирует порядок запуска контейнеров, но не гарантирует, что база данных уже готова к подключению. Вы можете добавить логику ожидания в вашем приложении или использовать `healthcheck` для проверки доступности базы данных.

3. **Неправильные параметры подключения**: Убедитесь, что настройки подключения к базе данных в вашем приложении верны. В вашем случае они выглядят корректными, но стоит проверить, нет ли опечаток или ошибок.

4. **Данные в volumes**: Проверьте, что ваши данные базы данных корректно монтируются и доступны. Если вы используете volumes для хранения данных, убедитесь, что они правильно настроены.

5. **Перезапуск контейнеров**: Если вы изменили настройки или конфигурации, возможно, стоит попробовать перезапустить контейнеры:
   ```bash
   docker-compose down
   docker-compose up -d
   ```

6. **Кэширование конфигураций**: Убедитесь, что в Yii2 у вас нет кэшированных конфигураций, которые могут влиять на подключение к базе данных. Вы можете попробовать сбросить кэш:
   ```bash
   php yii cache/flush-all
   ```

Если ни одно из предложенных решений не помогло, попробуйте предоставить дополнительные логи или сообщения об ошибках, чтобы детальнее разобраться в проблеме.
Похожие вопросы