small_jedi
@small_jedi

Почему Yii2 не подключается по другим портам к БД кроме 3306?

Имеется некий docker-compose. После сборки проекта, сайт на Yii2 не может подключится к БД, если порт не указан именно 3306(в docker-compose тоже указывается внешний 3306) на что пишет ошибку SQLSTATE[HY000] [2002] Connection refused
version: "3.9"

services:
  nginx:
    networks:
      - demo_site
    build:
      context: ./docker/nginx
    ports:
      - "27015:80"
    volumes:
      - ./:/var/www/demo_site.store:ro
      - ./docker/nginx/config:/etc/nginx/conf.d

  php-fpm:
    networks:
      - demo_site
    working_dir: "/var/www/demo_site.store"
    build:
      context: ./docker/php-fpm
    volumes:
      - ./:/var/www/demo_site.store
  mariadb:
    networks:
      - demo_site
    image: library/mysql:5.7
    restart: "always"
    volumes:
      - ./docker/db/sql.sql:/docker-entrypoint-initdb.d/sql.sql
    environment:
      MYSQL_ROOT_PASSWORD: root
    ports:
    - "3361:3306"

networks:
  demo_site:
    driver: bridge


db.php
<?php
return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=mariadb;port=3361;dbname=demo_site;',
    'username' => 'demo_site',
    'password' => '',
    'charset' => 'utf8',

    // Schema cache options (for production environment)
    'enableSchemaCache' => true,
    'schemaCacheDuration' => 3600 * 24 * 7,
    'schemaCache' => 'cache',
];


В чем может быть проблема? Причем просто в контейнер каким нибудь HeidiSql подключится можно. Но сайт не воспринимает другие порты
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
ты подключаешься ИЗ контейнера, внешний:внутренний порт - 3361:3306. и тебе скорее всего нужен образ https://hub.docker.com/_/mysql см.описание
Ответ написан
Комментировать
karabanov
@karabanov
Системный администратор
3361 это проброшенный в хостовую систему порт, чтобы можно было подключиться к MySQL не заходя в контейнер, но внутри контейнера MySQL слушает порт 3306.
Если хочешь, чтобы из контейнера с PHP можно было подключаться к другому порту (зачем?) поменяй порт в конфиге MySQL.

'dsn' => 'mysql:host=mariadb;port=3361;dbname=demo_site;',
Так не заработает, ведь этот порт из контейнера недоступен, ввиду того, что он находится в хостовой системе, то есть за рамками контейнера и виртуальной сети, которая объединяет контейнеры.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы