Доступ к интерфейсу хоста из Docker-контейнера#

Ориентируемся на https://stackoverflow.com/a/46449030

Мне нужно было подключиться из Docker-контейнера к базе данных PostgreSQL, работающей на хост-системе.

При запуске контейнера добавляем опцию –add-host и в реквизитах подключения вместо localhost или 127.0.0.1 пишем host.docker.internal (лишнее опустил):

--add-host host.docker.internal:host-gateway \
-e PHOTOVIEW_POSTGRES_URL=postgres://photoview:xxxxx@host.docker.internal:5432/photoview \

Далее делаем магию со StackOverflow с небольшими изменениями:

# sysctl -w net.ipv4.conf.docker0.route_localnet=1
# iptables -t nat -I PREROUTING -i docker0 -d 172.17.0.1 -p tcp --dport 5432 -j DNAT --to 127.0.0.1:5432
# iptables -t filter -I INPUT -i docker0 -d 127.0.0.1 -p tcp --dport 5432 -j ACCEPT

Теперь у контейнера появился доступ к сетке хоста (а именно, к 127.0.0.1), но надо ещё донастроить постгрес.

/etc/postgresql/12/main/pg_hba.conf

local   photoview       photoview       scram-sha-256
host    photoview       photoview       172.17.0.0/24           scram-sha-256

Оставляем возможность подключаться с локалхоста и также разрешаем коннекты с интерфейса докера.

Рестуртуем постгрес и радуемся:

# systemctl restsrt postgresql.service

Чтобы ничего не разввалилось после рестарта системы надо сохранить правила iptables и записать net.ipv4.conf.docker0.route_localnet=1 в /etc/sysctl.conf.