Python в контейнере Docker отказался от подключения к Postgres в сетевом контейнере DockerPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python в контейнере Docker отказался от подключения к Postgres в сетевом контейнере Docker

Сообщение Anonymous »

Я пытаюсь подключиться из сценария Python к базе данных Postgres. Вот мой докер-компоновка: < /p>

Код: Выделить всё

networks:
backend:
name: value_tracker_backend
external: true
services:
db:
build:
context: ./sql
dockerfile: db.dockerfile
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: EntitiesAndValues
ports:
- "5431:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d EntitiesAndValues"]
interval: 10s
retries: 5
start_period: 30s
timeout: 10s
networks:
- backend
dataseeder:
build:
context: .
dockerfile: dataseeder/dataseeder.dockerfile
depends_on:
db:
condition: service_healthy
restart: true
networks:
- backend
< /code>
А вот фрагмент кода Python, который пытается подключиться с помощью внутренней сети Dockers: < /p>
import psycopg2
from enum import Enum

class DatabaseConnector:
def __init__(self, db_name, db_user):
self.db_name = db_name
self.db_user = db_user

def __enter__(self):
self.conn = psycopg2.connect(user = self.db_user,
database = self.db_name,
password = "data",
host = "db",
port = 5432)
return self.conn

def __exit__(self, type, value, tb):
self.conn.close()
< /code>
Я продолжаю получать следующую ошибку: < /p>
0.394 dsn = 'user=data_seeder password=data host=db port=5432 dbname=EntitiesAndValues'
0.394 connection_factory = None, cursor_factory = None
0.394 kwargs = {'database': 'EntitiesAndValues', 'host': 'db', 'password': 'data', 'port': 5432, ...}
0.394 kwasync = {}
0.394
0.394     def connect(dsn=None, connection_factory=None, cursor_factory=None, **kwargs):
0.394         """
0.394         Create a new database connection.
0.394
0.394         The connection parameters can be specified as a string:
0.394
0.394             conn = psycopg2.connect("dbname=test user=postgres password=secret")
0.394
0.394         or using a set of keyword arguments:
0.394
0.394             conn = psycopg2.connect(database="test", user="postgres", password="secret")
0.394
0.394         Or as a mix of both. The basic connection parameters are:
0.394
0.394         - *dbname*: the database name
0.394         - *database*: the database name (only as keyword argument)
0.394         - *user*: user name used to authenticate
0.394         - *password*: password used to authenticate
0.394         - *host*: database host address (defaults to UNIX socket if not provided)
0.394         - *port*: connection port number (defaults to 5432 if not provided)
0.394
0.394         Using the *connection_factory* parameter a different class or connections
0.394         factory can be specified. It should be a callable object taking a dsn
0.394         argument.
0.394
0.394         Using the *cursor_factory* parameter, a new default cursor factory will be
0.394         used by cursor().
0.394
0.394         Using *async*=True an asynchronous connection will be created. *async_* is
0.394         a valid alias (for Python versions where ``async`` is a keyword).
0.394
0.394         Any other keyword parameter will be passed to the underlying client
0.394         library: the list of supported parameters depends on the library version.
0.394
0.394         """
0.394         kwasync = {}
0.394         if 'async' in kwargs:
0.394             kwasync['async'] = kwargs.pop('async')
0.394         if 'async_' in kwargs:
0.394             kwasync['async_'] = kwargs.pop('async_')
0.394
0.394         dsn = _ext.make_dsn(dsn, **kwargs)
0.394 >       conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
0.394                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0.394 E       psycopg2.OperationalError: could not translate host name "db" to address: Name or service not known
0.394
0.394 usr/local/lib/python3.13/site-packages/psycopg2/__init__.py:122: OperationalError
< /code>
Я попробовал несколько вещей, чтобы заставить это работать, что привело к предварительно созданной внешней сети.  Это кажется полезным, потому что я сначала запускаю базу данных с Docker Compose -up -D DB. Затем, как только я узнаю, что он работает, я также запускаю изображение DataSeeder. Он запускает некоторые тесты (запустите Pytest ...) перед созданием и запусками версии «Выпуск».FROM python:latest
# Create integration testing environment
RUN apt-get update
COPY dataseeder/ dataseeder/
COPY packages/ packages/
COPY tests/ tests/
COPY localtest.txt .
RUN pip install -r localtest.txt
RUN pytest -v tests/test_EntitiesValues.py
< /code>
pinging от dataseeder до db: < /p>
# ping db
PING db (172.18.0.2) 56(84) bytes of data.
64 bytes from valuetrackersampleproject-db-1.value_tracker_backend (172.18.0.2): icmp_seq=1 ttl=64 time=0.166 ms
64 bytes from valuetrackersampleproject-db-1.value_tracker_backend (172.18.0.2): icmp_seq=2 ttl=64 time=0.093 ms
64 bytes from valuetrackersampleproject-db-1.value_tracker_backend (172.18.0.2): icmp_seq=3 ttl=64 time=0.095 ms
64 bytes from valuetrackersampleproject-db-1.value_tracker_backend (172.18.0.2): icmp_seq=4 ttl=64 time=0.095 ms
64 bytes from valuetrackersampleproject-db-1.value_tracker_backend (172.18.0.2): icmp_seq=5 ttl=64 time=0.079 ms
64 bytes from valuetrackersampleproject-db-1.value_tracker_backend (172.18.0.2): icmp_seq=6 ttl=64 time=0.094 ms
Чего мне здесь не хватает?

Подробнее здесь: https://stackoverflow.com/questions/797 ... rked-docke
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»