Перейти к содержанию

Открываем доступ между сетями и контейнерами Docker


TrustMe

Рекомендуемые сообщения

  • Админы

Иногда возникает необходимость обеспечить взаимодействие между контейнерами, особенно если используется ufw-docker.

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

1. Настройка правил файрвола для ufw-docker:

sudo ufw default allow incoming

Это правило разрешает входящий трафик по умолчанию.

sudo ufw default allow outgoing

Это правило разрешает исходящий трафик по умолчанию.

sudo ufw allow in on network1 to any port 8080 proto tcp

Это правило разрешает входящий трафик на порт 8080 для сети network1.

sudo ufw allow in on network2 to any port 8080 proto tcp

Это правило разрешает входящий трафик на порт 8080 для сети network2.

sudo ufw allow in on network1 from network2

Это правило разрешает входящий трафик из сети network2 в сеть network1.

sudo ufw allow in on network2 from network1

Это правило разрешает входящий трафик из сети network1 в сеть network2.

sudo ufw reload

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

2. Настройка маршрутизации между сетями:

docker run -it --rm --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

Здесь разберем каждый атрибут команды для понимания их значения:

  • docker run: Эта часть команды используется для запуска контейнера Docker.
  • -it: Данный флаг указывает на выделение терминала и интерактивный режим.
  • --rm: Этот флаг означает, что контейнер будет удален после завершения его работы.
  • --privileged: Данный флаг предоставляет контейнеру привилегированный доступ, позволяя выполнять привилегированные операции.
  • --pid=host: Этот параметр позволяет контейнеру использовать PID хост-системы.
  • debian: Это имя образа контейнера, который будет запущен.
  • nsenter: Эта команда позволяет войти в пространство имен другого процесса.
  • -t 1: Данный аргумент указывает на PID процесса, в контексте которого будет выполнена команда (в данном случае, PID 1, который является процессом init).
  • -m -u -n -i: Эти флаги означают, что nsenter будет входить в пространства имен mount, UTS, network и IPC соответственно.
  • sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward": Эта часть команды выполняет команду внутри контейнера, в данном случае, устанавливает значение 1 для параметра ip_forward в файле /proc/sys/net/ipv4/ip_forward, что активирует маршрутизацию между сетями.

Эта команда запускает контейнер с привилегиями, необходимыми для изменения параметров ядра. Она активирует маршрутизацию между сетями.

3. Тестирование соединения между контейнерами:

docker exec -it container1 bash
# apt-get update && apt-get install -y curl
# curl container2:8080

Эти команды выполняются в контейнере container1. Они обновляют пакеты и устанавливают утилиту curl, затем выполняется запрос к контейнеру container2 на порт 8080.

docker exec -it container2 bash
# apt-get update && apt-get install -y curl
# curl container1:8080

Аналогичные команды выполняются в контейнере container2 для проверки соединения с container1.

После выполнения этих шагов контейнеры должны успешно обмениваться данными между собой. Важно также убедиться, что правила файрвола настроены корректно и не блокируют доступ между контейнерами.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Вот вроде бы старался человек, писал инструкцию. а толку то? Бесполезный текст. Половина пропущена типа сами разберетесь. Ну где найдем ответ, там и первая половина будет. Наверно.

Цитата

network1 и network2

- что это за имена сетей? где их взять?

Цитата

Важно также убедиться, что правила файрвола корректно настроены и не блокируют доступ между контейнерами

- а как?

Цитата

container1 и container2

Что это? имена или id контейнеров?

В итоге это не инструкция никакая. что-то типа напоминалки для самого себя, если забыл. А если не знаешь, то и не разберешься.

Ссылка на комментарий
Поделиться на другие сайты

  • Админы
22 минуты назад, Андрей сказал:

Вот вроде бы старался человек, писал инструкцию. а толку то? Бесполезный текст. Половина пропущена типа сами разберетесь. Ну где найдем ответ, там и первая половина будет. Наверно.

- что это за имена сетей? где их взять?

- а как?

Что это? имена или id контейнеров?

В итоге это не инструкция никакая. что-то типа напоминалки для самого себя, если забыл. А если не знаешь, то и не разберешься.

Спасибо за нежданный негатив.

Как минимум да, статьи пока созданы для себя. Чтобы не забыть.

Но как я посужу, с докером вы не сильны.

При создании контейнеров, обязательно указывается имя сети которая будет использоваться. Она может быть одинаковой (в таком случае решение проблемы описанной в этой статьи не будет требоваться, контейнеры будут общаться). Но часто бывает так, что контейнеры создаются с разными названиями сетей.

Поэтому да, Network1(2) - это Имена сетей конейнеров. Проверяется командой:

docker network ls

container1 и container2 - это имена контейнеров. Иначе было бы написано containerID.

В итоге для человека который пытается решить проблему - инструкция будет полезна.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Вы принимаете наши Условия использования, Политика конфиденциальности, Правила. А также использование Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.

Яндекс.Метрика