#python #django #postgresql #docker #docker-compose
#python #django #postgresql #docker #docker-compose
Вопрос:
Я запускаю этот скрипт локально. При подключении к postgres я сталкиваюсь с «Произошло исключение: OperationalError не удалось перевести имя хоста «db» по адресу: неизвестный хост». База данных запущена, я запустил ее с
docker run --publish 8000:8000 --detach --name db REMOTEURL:latest
Когда я делаю то же самое, используя docker-compose и exec в приложение django и запускаю его как команду управления, это работает. Код:
conn_string = "host='db' dbname='taras' user='postgres' password='postgres'"
with psycopg2.connect(conn_string) as connection:
with connection.cursor() as cursor:
... my stuff
Я не знаю, почему при доступе к контейнеру docker из локального скрипта на моем компьютере имя docker (url) никогда не распознается. Также попробовал «localhost» вместо «db». При запуске скрипта python внутри контейнера docker у него нет проблем с распознаванием другого контейнера docker (db в моем случае). Чего мне не хватает?
РЕДАКТИРОВАТЬ: просто чтобы уточнить, я использую только базу данных в docker. Скрипт Python запускается локально, используя в моей командной строке Windows
python myscript.py
Docker-создать файл:
version: "2"
services:
db:
image: REMOTEURL:latest
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_HOST_AUTH_METHOD: trust
Ответ №1:
Вероятно, это происходит потому, что при запуске контейнеров они могут разрешать имена хостов на основе имен, которые вы им даете внутри, но если вы хотите получить доступ к контейнеру извне (я предполагаю, что вы хотите получить доступ к своей базе данных postgres), вам также необходимо открыть порт для контейнера postgres, добавив -p 5432:5432
в свой контейнер postgres. Если вы хотите получить доступ к postgres из другого контейнера в той же сети, подключитесь с db:5432
помощью , а извне с помощью localhost:5432
Редактировать: попробуйте это как ваш docker-compose.yml
version: "2"
services:
db:
image: REMOTEURL:latest
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_HOST_AUTH_METHOD: trust
ports:
- 5432:5432
Комментарии:
1. Спасибо за ответ. В коде, который я опубликовал, уже есть —publish 8000:8000 (что эквивалентно -p ) . Пробовал 5432: 5432, никакой разницы: (
2. Может быть, я просто неправильно понял ваш вопрос, не могли бы вы попытаться описать его еще раз?
3. Могу ли я увидеть ваш файл docker compose?
4. Попробуйте внести docker-compose.yml в редактирование из ответа
5. Также могу я спросить, что такое изображение
REMOTEURL:latest
?