Я создал этот ответ на основе вашего docker-compose.yml файла
Создайте новую мостовую сеть в вашем файле docker-compose.yml:
networks:
my-new-network:
driver: bridge
Важно подключить все ваши контейнеры к одной сети (мосту), чтобы обеспечить связь между ними.
Добавьте каждый свой контейнер в новую сеть:
db:
image: 'mysql:latest'
volumes:
- ./database:/var/lib/mysql
ports:
- '3306:3306'
restart: always
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: database
networks:
- my-new-network
После этих изменений проверьте, если контейнерыможет общаться (отправлять пинг от одного к другому - использовать имена контейнеров):
Из контейнера nginx:
ping db
, если у вас нет команды ping
, установите iputils:
apt-get update
apt-get install iputils-ping
Если все работает хорошо - измените конфигурацию соединения с Yii DB:
return => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=db;port=3306;dbname=database', // change IP here to database container name
'username' => 'root',
'password' => 'pass',
'charset' => 'utf8',
],
Я думаю, это должно помочь решить вашу проблему. Позаботьтесь о связи между контейнерами :)
Убедитесь, что база данных может принимать внешние соединения.По умолчанию конфигурация mysql блокирует внешние соединения, поэтому вам следует проверить конфигурацию mysql и добавить нового пользователя , для которого вы можете войти «извне» (из внешних хостов / сетей):
CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';
Пользователь root mysql по умолчанию отключил удаленные подключения. Подробнее вы можете прочитать здесь
Журналы расскажут вам гораздо больше :) https://docs.docker.com/engine/reference/commandline/logs/
Я разветвил ваш репозиторий: https://github.com/raciniewski/docker-yii2
- Сборка и запуск всех контейнеров
docker-compose up --build


Отправьте ping в
db
контейнер из другого контейнера в вашей новой
my-new-network
сети:

Готово - контейнеры могут связываться