Docker compose запрос в локальную сеть хоста

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

При этом, если я добавлю
network_mode: host

то сеть между контейнерами рушится.

Как вариант -- перебросить всю контейнерную сеть на локалку хоста, но это не очень красиво, как мне кажется.

Засовывать postfix в сеть тоже не очень.

схема


Ответы (1 шт):

Автор решения: Roman Konoval

Я пользуюсь обратным 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. тут отличные иллюстрации, которые показывают как это работает:

обратный ssh туннель

→ Ссылка