Сама ошибка дает представление:
could not translate host name "postgres" to address: nodename nor servname provided, or not known
Хост postgres
не существует в DNS или в вашей локальной сети. SQLAlchemy
не может подключиться к нему. Это логично, поскольку вы создали контейнер docker и перенаправили порт 5432
на локальный компьютер.
Есть 2 варианта, которые вы можете выбрать - либо использовать адрес localhost
для подключения с flask app или запустите приложение flask как службу docker -compose.
Вариант 1 - используйте localhost
Переменная среды POSTGRES_HOST
, похоже, не используется изображением postgres
docker. Таким образом, вы можете просто изменить это в файле среды:
POSTGRES_USER=testdbuser
POSTGRES_PASSWORD=testdbpass
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=testdb
Вариант 2 - запустите flask с помощью docker -compose
Для этого вам нужно будет создать простой Dockerfile
и добавьте приложение flask в файл docker-compose.yml
.
Я предлагаю что-нибудь простое для Dockerfile
, например:
FROM python
COPY . /app
# How you install your python packages may differ
RUN pip install -r /app/requirements.txt
# Ensure the path here is correct
ENV FLASK_APP /app/app.py
CMD flask run
Тогда вам нужно будет добавить это в файл docker-compose.yml
:
version: '3.5'
services:
database:
container_name: postgres-test
image: postgres:latest
env_file: database.conf
ports:
- 5432:5432
volumes:
- postgres-data:/var/lib/postgresql/data
flask:
build:
context: .
dockerfile: Dockerfile
environment: # or use env_file as you did above
POSTGRES_USER: testdbuser
POSTGRES_PASSWORD: testdbpass
POSTGRES_HOST: database # This is the name of the database service in this file above
POSTGRES_PORT: 5432
POSTGRES_DB: testdb
depends_on:
- database
volumes:
postgres-data:
Надеюсь, это поможет вам.