@SMaster1

Как подключиться из Docker к внешней БД? Например, к существующему Postgresql и Redis?

Как подключиться из Docker к внешней БД? Например, к существующему Postgresql и Redis.

Существующий docker-compose:
version: '3'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    image: my-app:${CORE_TAG-latest}
    network_mode: "host"


Получаю ошибку, при подключении к Redis:
Could not establish a connection with redis. Error: connect ECONNREFUSED 127.0.0.1:6379

Сейчас Redis на той же машине, но все равно приложение в Докере не видит его.

UPD 1:

version: '3.9'
services:
  web:
    build: .
    image: my-app:${CORE_TAG-latest}
    environment:
      REDIS_HOST: 0.0.0.0
    extra_hosts:
      - "host.docker.internal:host-gateway"


Выдает ошибку
Could not establish a connection with redis. Error: connect ECONNREFUSED 0.0.0.0:6379

UPD 2:
version: '3.9'
services:
  web:
    build: .
    image: my-app:${CORE_TAG-latest}
    extra_hosts:
      - "host.docker.internal:host-gateway"


Тоже не работает:
Could not establish a connection with redis. Error: connect ECONNREFUSED 127.0.0.1:6379

UPD 3:

Похоже, что-то с сетью на машине:
cat /etc/docker/daemon.json
{
  "bip": "172.21.0.1/16",
  "default-address-pools":[
    {"base":"172.22.0.0/16","size":24},
    {"base":"172.23.0.0/16","size":24}
  ]
}


docker inspect bridge | jq '.[].IPAM.Config'
[
  {
    "Subnet": "172.17.0.0/16"
  }
]


Как-то надо править host из списка docker network list ?
  • Вопрос задан
  • 367 просмотров
Решения вопроса 1
@SMaster1 Автор вопроса
Не знаю на сколько правильный такой подход, но так работает:

version: '3.9'
services:
  web:
    ports:
      - "3000:3000"
    build: .
    image: my-app:${CORE_TAG-latest}
    environment:
      REDIS_HOST: "host.docker.internal"
      # REDIS_PORT: 6379
      DB_HOST: "host.docker.internal"
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
karabanov
@karabanov
Системный администратор
У каждого контейнера свой отдельный loopback интерфейс никак не связанный с хостовой системой.
Разреши Redis-у слушать 0.0.0.0 и сможешь подключиться к нему по адресу шлюза контейнера.
Ответ написан
Попробуйте так: https://stackoverflow.com/a/43541681/6912339
Ответ написан
Комментировать
SADFGHJAETJER
@SADFGHJAETJER
Используйте как адрес хоста: docker.host.internal
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы