Я должен внедрить в свой класс Распределенных систем Алгоритм Беркли, и я решил сделать это на python с сокетами.Предполагается, что ведущий работает на хосте, а ведомые - в док-контейнерах.
Самое близкое, что я получил от подключения хоста (в качестве главного устройства) к контейнеру (в качестве ведомого устройства), отображало порты с флагом -p 9000:9000
для запуска контейнера, хост успешно подключается к контейнеру, ноне получает и не отправляет ничего (то же самое для контейнера), с этим я пришел к выводу, что сокет python внутри процесса просто не получает пакеты из порта.Я уже пробовал использовать флаг -net=host
, но хост просто не может найти контейнер.Один из моих достижений состоял в том, чтобы создать два контейнера докеров и пропинговать один из другого, используя имя хоста, указанное в /etc/hosts
, но это не то, чего я действительно хочу.
У меня весь код в github если вам нужен источник.Код комментируется на английском языке, но документация на португальском
Подводя итог, все, что я хочу сделать, - это открыть сокет с python внутри контейнера докера и иметь возможность подключиться к хост-машине, какую сетьКонфигурация, мне нужно, чтобы я мог это сделать?
РЕДАКТИРОВАТЬ: Подробнее
Следующий скрипт bash используется для создания трех контейнеров докеров, а затем выполнения команды в каждом из них для клонированиямой репозиторий, перейдите в него и в тестовую папку, содержащую bash, чтобы запустить подчиненное устройство, а затем запустить мастер на хосте:
docker run -it -d -p 127.0.0.1:9000:9000/tcp --name slave1 python bash
docker run -it -d -p 127.0.0.1:9001:9001/tcp --name slave2 python bash
docker run -it -d -p 127.0.0.1:9002:9002/tcp --name slave3 python bash
docker exec -t -d slave1 bash -c 'git clone https://github.com/guilhermePaciulli/BerkeleyAlgorithm.git;cd BerkeleyAlgorithm;git pull;cd test;bash slave_1.sh'
sleep 1
docker exec -t -d slave2 bash -c 'git clone https://github.com/guilhermePaciulli/BerkeleyAlgorithm.git;cd BerkeleyAlgorithm;git pull;cd test;bash slave_2.sh'
sleep 1
docker exec -t -d slave3 bash -c 'git clone https://github.com/guilhermePaciulli/BerkeleyAlgorithm.git;cd BerkeleyAlgorithm;git pull;cd test;bash slave_3.sh'
sleep 1
bash test/master.sh
Для запуска каждого экземпляра я использую другую команду bash
- Для создания экземпляра ведомого, который я использую:
python ../main.py -s 127.0.0.1:9000 175 logs/slave_log_1.txt
-s - это флаг, который сообщает классу main.py, что это подчиненное устройство, 127.0.0.1:9000 - это ipи порт, который этот подчиненный будет слушать (и мастер будет подключаться), а остальные - просто конфигурации (этот пример используется для первого подчиненного).
- И для insПодтвердите мастер, которого я использую:
python ./main.py -m 127.0.0.1:8080 185 15 test/slaves.txt test/logs/master_log.txt
Так же, как и ведомый, -m сообщает main, что это мастер, 127.0.0.1:8080 - это ip и порт, к которому мастер собирается подключитьсядля раба, а остальные просто конфигурации.