Docker – Как Разрешить Адрес Локального Хоста Операционной Системы Изнутри Контейнера?

  • Автор темы G0rg0n
  • Обновлено
  • 19, Oct 2024
  • #1

У меня работают два докер-контейнера:

localhost

Я могу подключиться к ним обоим через клиентов на своем компьютере, но не могу получить доступ к одному контейнеру из другого. Я хотел бы использовать Postgres

Could not connect to server: Connection refused

Is the server running on host "localhost" (127.0.0.1) and accepting

TCP/IP connections on port 5431?
feature - i.e. (in case it matters), I am running a query on one server that looks like this:

select
dp.*
from dblink(

'dbname=mydb

port=5431

host=localhost

user=postgres

password=password', 'select 1'
) as dp (i int)

Это приводит к ошибке, в которой говорится:

dblink

И я думаю, это потому, что

Postgres 9.4: 0.0.0.0:5431->5432/tcp
Postgres 11: 0.0.0.0:5432->5432/tcp
is the loopback address inside the container. What is the way around this? (I'm super new to Docker by the way)

#докер

G0rg0n


Рег
21 Oct, 2011

Тем
65

Постов
200

Баллов
555
  • 25, Oct 2024
  • #2

Вы правы в том, что использование localhost внутри контейнера ссылается на контейнер, а не на вашу сеть. Вы можете использовать проверку, найти IP-адрес и жестко запрограммировать его. Однако более простым и понятным решением было бы использовать сетевые функции Docker. Когда вы запускаете контейнеры, вы можете поместить их в определенную сеть. Контейнеры в этой сети могут разрешать запросы к другим контейнерам, используя имя своего контейнера вместо IP-адреса (например, Server=container2).

Документация по сети Docker

 

Ника22


Рег
18 Nov, 2015

Тем
65

Постов
189

Баллов
544
  • 25, Oct 2024
  • #3

Ах. Ну, ответ высокого уровня, который позволяет мне пока просто «пройти мимо», таков:

Docker автоматически создаст сеть при запуске одного или нескольких контейнеров. Вы можете проверить IP-адрес контейнера в этой виртуальной сети, выполнив:

docker container inspect <container name>

Мне удалось найти адрес шлюза контейнера postgres, из которого я хочу выполнить запрос, и использовать его таким образом.

 

Nomu


Рег
16 Jul, 2009

Тем
82

Постов
206

Баллов
636
  • 25, Oct 2024
  • #4

ты можешь использовать

"создать сеть докеров"

создать свою собственную сеть. Как только вы это сделаете при создании контейнера, используйте

"--сеть "

чтобы создать 2 контейнера в одной сети. Контейнеры в одной сети могут взаимодействовать друг с другом.

 

Monstrik_666


Рег
06 May, 2016

Тем
70

Постов
205

Баллов
625
Похожие темы Дата