Docker compose запрос в локальную сеть хоста
В общем.
Мне нужно сделать запрос на локальную сеть хоста из контейнера, который находится в контейнерной сети.
При этом, если я добавлю
network_mode: host
то сеть между контейнерами рушится.
Как вариант -- перебросить всю контейнерную сеть на локалку хоста, но это не очень красиво, как мне кажется.
Засовывать postfix в сеть тоже не очень.
Ответы (1 шт):
Я пользуюсь обратным ssh туннелем.
Сначала создаю образ из Dockerfile:
FROM alpine:3.5
RUN apk add --no-cache openssh && ssh-keygen -A && echo 'root:root' | chpasswd
EXPOSE 22
CMD /usr/sbin/sshd -D -o PermitRootLogin=yes -o AddressFamily=inet -o GatewayPorts=yes
допустим называю его sshd:latest.
Если для демострации запустить команду, которая будет ждать соединения в отдельном терминале
echo -e "HTTP/1.1 200 OK\n\nHello" | nc -l 10000
то можно сделать так:
$ cat docker-compose.yml
version: '3'
services:
curl:
image: curlimages/curl
host:
image: sshd:latest
ports:
- "22222:22"
$ docker-compose up -d host
Creating network "sshd-demo_default" with the default driver
Creating sshd-demo_host_1 ... done
$ ssh -f -T -N -R 9000:localhost:10000 -p 22222 root@localhost
root@localhost's password:
$ docker-compose run curl host:9000
Creating sshd-demo_curl_run ... done
Hello
Т.е. обратный ssh тунель перенаправляет все соединения с портом 9000 к контейнеру с sshd на локальный хост на порт 10000.
Если нужно делать запрос на другой хост доступный с локального хоста, то можно это задать изменив значение опции -R к ssh. тут отличные иллюстрации, которые показывают как это работает:

