Вы можете использовать два метода для решения этой проблемы:
1. Пользовательские сети
Мостовая сеть по умолчанию присутствует на всех хостах Docker. Если вы не укажете другую сеть, новые контейнеры будут автоматически подключены к мостовой сети по умолчанию.
Ссылка
Вы можете получить IP-адрес контейнеров, используяdocker network inspect bridge
. Затем вы можете использовать атрибут IP-адрес из контейнеров.
Это не рекомендуется, поскольку изменения в контейнере могут изменить IP-адрес.
Docker не поддерживает автоматическое обнаружение службы по умолчаниюмостовая сеть. Если вы хотите, чтобы контейнеры могли разрешать IP-адреса по имени контейнера, вам следует вместо этого использовать пользовательские сети. Вы можете связать два контейнера вместе, используя устаревшую опцию запуска dolink --link, но в большинстве случаев это не рекомендуется.
Чтобы создать сеть, выполните docker network create --driver bridge django_network
.
Затемприсоедините оба контейнера к одной сети, используя docker run -it postgres --network=django_network
и docker run -it cath2019/cathedral_studio:latest --network=django_network
.
Теперь вы можете подключиться к базе данных postgres из вашего приложения django, используя имя хоста.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'cath_local',
'USER': 'postgres',
'PASSWORD': 'mypass',
'HOST': 'postgres',
'PORT': '5432',
'OPTIONS': {
'client_encoding': 'UTF8',
},
}
}
2. Docker-compose
Ознакомьтесь с официальной документацией Ссылка , чтобы докернизировать приложение django.
version: '3'
services:
db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db