Чтобы использовать postgres внутри Docker, вам нужно настроить информацию, такую как пользователь базы данных, пароль и имя базы данных.Это делается путем установки переменных среды для контейнера.Полный список поддерживаемых переменных можно найти здесь .
Кроме того, вы захотите открыть порт 5432
postgres для вашей службы web
внутри вашего docker-compose
файла.
Примерно так должно работать:
docker-compose.yml
version: '3'
services:
db:
image: postgres
ports:
- "5432"
environment:
- POSTGRES_DB=stemletics
- POSTGRES_USER=stemleticsadmin
- POSTGRES_PASSWORD=changeme
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
Вам также придется изменить имя хоста, которое вы используете внутри settings.py
.docker-compose
создает сеть по умолчанию для ваших служб и присоединяет к ней запущенные контейнеры.Внутри вашего веб-контейнера база данных будет доступна по имени хоста db
.
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'stemletics',
'USER': 'stemleticsadmin',
'PASSWORD': 'changeme',
'HOST': 'db', # set in docker-compose.yml
'PORT': 5432 # default postgres port
}
}
Наконец, если у вас нет какой-либо базы данныхлогика переподключения в вашем коде python, миграция может все еще потерпеть неудачу.Это связано с тем, что depends_on
ожидает только запуска контейнера, но postgres потребуется несколько секунд для инициализации после запуска контейнера.
Чтобы быстро обойти это,проще всего запускать один контейнер за раз.
т.е.:
$ docker-compose up -d db
Подождите, пока postgres инициализируется
$ docker-compose up -d web
Надеемсяэто заставляет вас работать.