Подтвердить что ты не робот

Docker-compose и pdb

Я вижу, что я не первый, кто задал вопрос, но на этот вопрос не было однозначного ответа:

Как использовать pdb с docker-composer в разработке Python?

Когда вы спрашиваете дядю Google о django docker, вы получаете замечательные примеры и учебные пособия докер-композитора, и у меня есть работающая среда - я могу запустить docker-compose up, и у меня отличная среда разработки , но PDB не работает (что очень печально).

Я могу решить с запуском docker-compose run my-awesome-app python app.py 0.0.0.0:8000, но затем я могу получить доступ к моему приложению через http://127.0.0.1:8000 от хоста (я могу с docker-compose up), и кажется, что каждый раз, когда я использую run, новые контейнеры создаются как: dir_app_13 и dir_db_4, которые я вообще не хочу.

Люди доброй воли, пожалуйста, помогите мне.

PS
Я использую pdb ++ для этого примера и базовый docker-compose.yml из этот пример django. Также я экспериментировал, но мне ничего не помогает. И я использую docker-composer 1.3.0rc3, так как он поддерживает поддержку указателей Dockerfile.

4b9b3361

Ответ 1

Попробуйте запустить веб-контейнер с опцией -service-ports: docker-compose run --service-ports web

Ответ 2

Используйте следующие шаги, чтобы прикрепить pdb к любому скрипту python.

Шаг 1. Добавьте следующее в ваш файл yml

stdin_open: true
tty: true

Это включит интерактивный режим и подключит стандартный ввод. Это эквивалентно режиму -it.

Шаг 2.

docker attach <generated_containerid>

Теперь вы получите оболочку pdb

Ответ 3

До моего опыта команда docker-compose up не предоставляла интерактивную оболочку, но запускает печать STDOUT в оболочку только для чтения по умолчанию.

Или, если вы указали и сопоставили каталог журналов, команда docker-compose up ничего не напечатает на подключенной оболочке, но отправит вывод в ваши сопоставленные журналы. Таким образом, вы должны прикрепить контейнер отдельно после его запуска.

когда вы делаете docker-compose up, сделайте это в отдельном режиме через -d и подключитесь к контейнеру через

docker exec -it your_container_name bash