Приложение и его база данных могут работать на одном и том же хосте или на разных хостах, а также в Docker или нет.
Если приложение и его база данных работают на разных хостах, существуетнет ничего необычного в настройке этого в Docker. Настройте ваше приложение с DNS-именем сервера базы данных. (Я бы рекомендовал передавать это через переменные среды, а не изменять файл settings.py
.)
Синтаксис Docker Compose:
environment:
MYSQL_HOST: mysql.example.com
Если оба работают в одной и той же настройке Docker, то Dockerобеспечивает внутреннюю настройку DNS для одного, чтобы достигнуть другого. В Docker Compose, , вы можете использовать клавишу services:
в качестве имени хоста ;в обычном Docker, вам нужно вручную docker network create
, но тогда этот трюк работает.
Пример простого Docker:
docker network create app
docker run --net app --name mysql -v $PWD/mysql:/var/lib/mysql/data mysql
docker run --net app --name app -e MYSQL_HOST=mysql myapp
Если база данных работает на том жехост в качестве приложения, но вне Docker, и хост - это система Mac или Windows, на которой запущено приложение Docker Desktop, тогда существует специальное host.docker.internal
имя хоста
docker run -e MYSQL_HOST=host.docker.internal myapp
ДляУ хоста native-Linux этот ярлык не существует, и вам нужно узнать IP-адрес хоста, но затем вы можете рассматривать это как первый случай.