У меня приложение работает на контейнере. У меня запущен сервер mysql и возникли проблемы с подключением моего приложения к серверу mysql. Это скриншот ошибки
мой файл docker-compose.yml:
version: '3'
services:
db:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=new_password
- MYSQL_USER=composetest
- MYSQL_PASSWORD=new_password
- MYSQL_DATABASE=sample_db
- MYSQL_HOST=localhost
web:
build: .
command: bash -c "python check_db.py --service-name mysql --ip db --port 3306 &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/code
ports:
- "8000:8000"
Я хотел бы написать свою докер-композицию, как рев. Нет необходимости устанавливать хост и связывать службу с depend_on
version: '3'
services:
db:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=new_password
- MYSQL_USER=composetest
- MYSQL_PASSWORD=new_password
- MYSQL_DATABASE=sample_db
web:
build: .
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
Я удалил команды из docker-compose, которые вы можете добавить в сценарий bash, и добавьте для запуска в точке входа. Скрипт будет выглядеть примерно так. Я делаю cd, чтобы перейти в соответствующий каталог, где установлены приложения.
run.sh
#!/bin/sh
#getting into the directory where the command should run.
cd /app
python check_db.py --service-name mysql --ip db --port 3306
python manage.py migrate
python manage.py runserver 0.0.0.0:8000
В разделе настройки базы данных, в котором вы задаете имя хоста, поместите имя службы в свой случай, db.
Это в целом то, что я делаю в развертывании приложения laravel, должно быть одинаковым в вашем случае
Вы забыли связать веб-контейнер с контейнером db.
Добавьте в веб-конфигурацию следующее: все должно быть:
links:
- db