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

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

Я мог бы перенастроить/перепрограммировать эту службу для привязки ко всем интерфейсам, но это может иметь последствия для безопасности в других контекстах. Есть ли способ открыть службу, привязанную к локальному хосту, внутри контейнера докеров?


person TinkerTank    schedule 02.11.2016    source источник
comment
Я собирался предложить iptables с --cap-add=NET_ADMIN, но, похоже, есть некоторые проблемы с DNAT в пространстве имен контейнера.   -  person Matt    schedule 03.11.2016


Ответы (1)


В итоге я использовал socat внутри контейнера докеров, чтобы проксировать любые соединения tcp на соответствующем номере порта, поступающем на общедоступный интерфейс, на частный интерфейс.

Например, это можно добавить в сценарий запуска контейнера докеров, чтобы проксировать службу, привязанную к локальному хосту: 3000, на: 3000, где она может быть открыта и --связана, как и любая другая служба. Обязательно установите socat внутри контейнера.

socat TCP4-LISTEN:3000,bind=`hostname -I | tr -d '[:space:]'`,fork TCP4:localhost:3000 &

Пожалуйста, обрати внимание; Я использую hostname -I | tr -d '[:space:]', чтобы узнать IP-адрес контейнера докеров. Поскольку обычно контейнеры Docker имеют только один общедоступный IP-адрес, это работает хорошо.

person TinkerTank    schedule 02.11.2016