Не удается подключить базу данных PostgreSQL из докера к python

Я пытаюсь использовать Postgresql с python. Я использовал следующий докер для создания файла.

version: '3.1'

services:

  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: admin_123
      POSTGRES_USER: admin

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

С помощью следующего кода я пытаюсь подключиться к базе данных.

conn = psycopg2.connect(
    database = "db_test",
    user  = "admin",
    password = "admin_123",
    host = "db"
)

Но я получаю эту ошибку.

OperationalError: could not translate host name "db" to address: nodename nor servname provided, or not known

Что я делаю неправильно?

Возможный дубликат docker-compose: разница между сетью и ссылкой

awesoon 10.02.2019 15:54

как ? не могли бы вы объяснить? это я читал но не понял

TheTechGuy 10.02.2019 16:01

Где работает ваш код Python; на хосте или в контейнере? Если в контейнере, то как вы его запустили?

David Maze 10.02.2019 16:15

Я работаю с Jupyter там

TheTechGuy 10.02.2019 16:15

Извините, эта ссылка, вероятно, неактуальна здесь. Я думал, вы пытаетесь получить доступ к db внутри adminer, это правильно?

awesoon 10.02.2019 16:19

Я пытаюсь получить доступ к БД с помощью python

TheTechGuy 10.02.2019 16:20

@TheTechGuy Вы пытаетесь подключиться к базе данных с вашего хост-компьютера?

Zak 10.02.2019 16:55

да, та же машина, на которой работает докер, мне просто нужно вставить данные в базу данных. База данных работает в Docker. и у меня есть блокнот Jupyter, к которому я пытаюсь подключиться. Пока я пытаюсь подключиться, я получил указанную ошибку.

TheTechGuy 10.02.2019 17:01
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
8
7 078
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам нужно выставить порт BD в докере, составленном следующим образом:

db:
image: postgres
restart: always
environment:
  POSTGRES_PASSWORD: admin_123
  POSTGRES_USER: admin
ports:
    - "5432:5432"

А затем подключитесь к локальный: 5432

Другой возможный сценарий,

Проверьте, использовались ли порты другим док-контейнером. Используйте команду:

$ docker container ls --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}" -a

Вот мой docker-compose.yml

$ кошка docker-compose.yml

version: '3.1' # specify docker-compose version
services:
  dockerpgdb:
    image: postgres
    ports:
      - "5432:5432"
    restart: always
    environment:
      POSTGRES_PASSWORD: Password
      POSTGRES_DB: dockerpgdb
      POSTGRES_USER: abcUser
    volumes:
      - ./data:/var/lib/postgresql%

Теперь в PgAdmin4 вы можете настроить новый сервер, как показано ниже, для проверки соединения:

host: localhost
port: 5432
maintenance database: postgres
username: abcUser
password: Password

Другие вопросы по теме