Самое простое решение - это `docker run --network host...` либо в `docker-compose.yml` добавить:
version: '3'
services:
myservice:
// ...
network_mode: host
По целому ряду причин эти решения могут нам не подходить. Далее я опишу еще одно решение.
Итак, для начала нам нужно узнать свой локальный ip-адрес:
$ hostname -I | cut -d ' ' -f1
192.168.0.82
Далее нужно получить путь до config-файла:
$ psql
psql (10.5 (Ubuntu 10.5-0ubuntu0.18.04))
Type "help" for help.
sergey=# SHOW config_file;
config_file
-----------------------------------------
/etc/postgresql/10/main/postgresql.conf
(1 row)
sergey=# \q
Потом добавить локальный айпи в список прослушиваемых адресов:
$ sudo nano /etc/postgresql/10/main/postgresql.conf
Должно получиться что-то типа этого:
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = 'localhost,192.168.0.82' # можно просто звездочку (*) напечатать
В конец `/etc/postgresql/10/main/hba_conf.conf` нужно добавить строку:
host all all 172.17.0.0/8 md5
Это позволит избежать ошибок вида:
asyncpg.exceptions.InvalidAuthorizationSpecificationError: no pg_hba.conf entry for host "172.17.0.x"
Перезапускаем Postgres:
$ sudo sytemctl restart postgresql
Ну и далее в скриптах вместо localhost указываем локальный айпишник.
Инструкция здесь
Описанный способ подходит и для mysql: нужно чтобы mysql-сервер слушал хост 0.0.0.0