Давайте предположим, у меня есть следующий docker-compose.yml
файл работает два различных приложений питона параллельно (например, через колбу):Отладка связанных Docker контейнеров при использовании докер-компоновать
app1:
command: python app.py
build: app1/
app2:
command: python app.py
build: app2/
links:
- app1
app2
связан с app1
, так как я хочу, чтобы получить конкретные данные от app1
внутри него. Теперь моя проблема - это определенный сценарий, когда я хочу отлаживать эту ссылку. Я могу легко отлаживать app1
и app2
как автономные контейнеры (через docker-compose run --service-ports ... python app.py
и размещение pdb
где-то в коде). Моя проблема в том, когда я хочу отлаживать app1
, если запрос исходит от app2
. Если я начинаю app1
с docker-compose run
, то app2
не может решить эту проблему. Эта проблема становится еще более проблематичной, когда большее количество приложений/сервисов «разговаривает» друг с другом в зависимости от их ссылок.
Есть ли хороший способ справиться с этим? Как вы относитесь к проблеме отладки со связанными контейнерами вообще (не обязательно python specificc)? Спасибо за ввод.
Не работает ли он, если вы запустите сервис 'app2' с se порты rvice? Подобно 'docker-compose run --service-ports app2'. Если нет, вы можете запустить службу «app1» со служебными портами, захватить имя контейнера, а затем запустить вторую службу «app2», связав ее вручную с запущенным «app1» (используя '--link'). Или, возможно, вам даже не нужно предоставлять ссылку, если 'app1' уже запущен (с портом обслуживания), и это экземпляр ** только ** этой службы запущен, запуск' app2' должен автоматически подключаться к нему. – linkyndy
Если я запускаю обе службы с флагом '--service-ports', можно запускать' app1', но 'app2' не может запускаться, потому что он пытается запустить связанный контейнер для' app1' отдельно. Если я использую '-no-deps', ссылка не будет установлена. Ваше второе решение будет работать, но его сложно автоматизировать. Также я хотел бы остаться в границах 'docker-compose' и не использовать простой' docker', если это не необходимо. –
Я нашел одно обходное решение, которое в настоящее время работает для меня. При запуске каждого контейнера для отладки я запускаю их с флагами '--service-ports' и' --no-deps'. Для того, чтобы они могли общаться, мне также нужно передать IP-адрес хост-машин в качестве переменной среды и открыть порты каждого контейнера. IP-адрес хоста автоматически доступен из каждого контейнера докера, поэтому я могу делать запросы туда вместо того, чтобы делать запросы к IP из ссылки. Также мне нужно запустить все промежуточные контейнеры, подобные этому. Тем не менее, это единственный способ обхода проблемы. Я предпочел бы иметь встроенное решение. –