@PtrGrd

Как подключить Python к Postgresql внутри Docker-а?

У меня есть скрипт, написанный на Python, который достает из Postgres данные. На локальной машине все работает, в Docker ситуация иная. Не могу подключить Python к Postgres внутри Docker-контейнера. Использую docker-compose в данном случае, под параметр хоста беру ip контейнера с базой данных. Все равно ничего не видит и скрипт не подключается. Помогите мне пожалуйста в данном вопросе

[ Фрагмент кода с подключением к БД в Python ]

try:
	conn = psycopg2.connect(
		database = "users",
		user = "postgres",
		password ="postgres",
		port = "5432",
		host = "172.22.0.2"
	)
	print("[INFO] Подключение с БД установлено")
	cur = conn.cursor()
except:
	print("[INFO] Нет соединения с БД")


[ Сама ошибка, вылетающая при подключении к БД ]
[INFO] Нет соединения с БД
[INFO] Не удалось узнать кол-во записей в БД
var = cur.fetchall()
NameError: name 'cur' is not defined. Did you mean: 'chr'?


[ Dockerfile ]

FROM python:latest

WORKDIR /script/src

COPY ./ /script

COPY requirements.txt /script
COPY src /script/src

RUN apt-get update && apt-get install -y python3-pip
RUN pip install -r /script/requirements.txt
RUN chmod +x /script/src/script.py

CMD ["python3", "/script/src/script.py"]


[ docker-compose.yml ]
version: '3.8'

services:
 script:
  build: ./script/
  command: /script/src/script.py
  container_name: script-mtg
  depends_on:
    - db
  networks:
    - net
 db:
  image: postgres:latest
  container_name: dbpg-mtg
  restart: always
  volumes:
    - ./ .database/postgres/data:/var/lib/postgresql/data
  ports:
    - "5432"
  networks:
    - net


networks:
 net:
  driver: bridge
  • Вопрос задан
  • 2898 просмотров
Решения вопроса 1
@antares4045
host = "172.22.0.2"
Замените на
server="db"
Или
host="db"
(Точно пайкопгвский синтаксис не помню)
И это вам не помешает, но явным созданием бридж сети и биндом сервисов к ней вы воспроизвели поведение по умолчанию, тоесть написали много всего лишнего.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы