У меня есть приложение, которое создает несколько контейнеров в определяемой пользователем сети докеров .

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

К сожалению, порты карты для хоста общедоступны на моем хост-компьютере. Есть ли способ, которым эти сопоставленные порты могут быть доступны только с localhost моего хост-компьютера?

1
nikitz 15 Апр 2019 в 16:06

2 ответа

Лучший ответ

Если вы используете docker для запуска портов -p [номер-порта]: [номер-порта], вы можете использовать:

docker run -p 127.0.0.1:80:80 container

Вместо того:

docker run -p 80:80 container

По умолчанию Docker предоставляет ваши порты на всех доступных интерфейсах.

4
Alassane Ndiaye 15 Апр 2019 в 13:21

Если вы используете Linux, вы можете использовать iptables для этого.

iptables -A INPUT -p tcp -s localhost --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j DROP

Просто измените 8080 на нужный порт и запускайте его несколько раз для каждого порта, который вы предоставляете.

Первая команда - «все, что приходит с локального хоста на порт 8080, позволяет это», а вторая - «отбросить все, что входит в порт 8080».

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

iptables-save > /etc/iptables.conf

И восстановить его с помощью:

iptables-restore < /etc/iptables.conf
0
Esteban Garcia 15 Апр 2019 в 13:15