2016-10-25 1 views
6

Я только что зарегистрировался на этот вопрос. Речь идет о том, можно ли удалять отладочный код python в контейнере Docker с VS Code. У меня есть полностью сконфигурированный контейнер Docker. Мне немного помогло, и я все-таки новичок в докере. В нем работает Odoo v10. Но я не могу заставить удаленный отладчик в VS Code работать. Я пробовал this пояснения, но я действительно не понимаю. Возможно ли это? И если да, как я могу заставить его работать? Я запускаю Kubuntu 16.04 с VS Code 1.6.1 и расширением Python от Don Jayamanne. Ах да, и я надеюсь, что я нахожусь в правильном месте с этим вопросом, и это не против каких-либо правил.Как удаленный отладочный код Python в контейнере Docker с кодом VS

UPDATE:

Только что попробовал путь Элтона Stoneman. С его помощью я получаю эту ошибку:

There was an error in starting the debug server. 
Error = {"code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect", 
     "address":"172.21.0.4","port":3000} 

Dockerfile Мой выглядит следующим образом:

FROM **cut_out** 
USER root 
# debug/dev settings 

RUN pip install \ 
     watchdog 

COPY workspace/pysrc /pysrc 
RUN apt-get update \ 
&& apt-get install -y --no-install-recommends \ 
     build-essential \ 
     python-dev \ 
&& /usr/bin/python /pysrc/setup_cython.py build_ext --inplace \ 
&& rm -rf /var/lib/apt/lists/* 

EXPOSE 3000 

USER odoo 

В pysrc в моем Dockerfile это там, потому что это было предназначено для работы с PyDev (Eclipse) до.

Это run command я использовал:

docker-compose run -d -p 3000:3000 odoo 

И это важная часть моей launch.json:

{ 
     "name": "Attach (Remote Debug)", 
     "type": "python", 
     "request": "attach", 
     "localRoot": "${workspaceRoot}", 
     "remoteRoot": "${workspaceRoot}", 
     "port": 3000, 
     "secret": "my_secret", 
     "host": "172.21.0.4" 
    } 

Я надеюсь, что это достаточно информации, на данный момент.

ОБНОВЛЕНИЕ 2:

Хорошо я нашел решение. Я совершенно неправильно понял, как работает Докер, и попробовал это неправильно. У меня уже была полная настройка Docker-compose. Поэтому все, что мне нужно было сделать, - это адаптировать мои конфигурации VS Code к docker-compose.yml. Это означает, что мне просто пришлось сменить launch.json на порт 8069 (порт по умолчанию Odoo) и просто нужно использовать docker-compose up, затем отладка работает в VS Code. К сожалению, использование ptvsd kinda разрушает мою среду Odoo, но, по крайней мере, я могу отлаживать сейчас. Благодаря!

+0

Можете ли вы обновить свое обновление 2 тем, что вы положили в свой 'launch.json'? Также не уверен, что вы имели в виду, когда говорили, что используете 'docker-compose up'. Объяснение вашего рабочего процесса было бы оценено :) – allthethings

+0

К сожалению, у меня нет моего запуска.json' для этого проекта больше, но все, что я изменил в нем, было портом для «порта»: 8069'. 'docker-compose' - это инструмент, расширяющий функциональность докера. 'docker-compose up' просто запускает все найденные контейнеры докеров. Я должен сказать, что он по-прежнему не работает должным образом, я никогда не получал удаленный дозатор отладки в VS Code для работы tbh. Если вы его заработаете, скажите мне :). – Brotbret

ответ

4

Да, это возможно - когда приложение Python работает в контейнере Docker, вы можете рассматривать его как удаленную машину.

В вашем Докер изображения, вам нужно сделать порт удаленной отладки доступны (например, EXPOSE 3000 в Dockerfile), включают ptvsd установки в вашем приложении Python, а затем опубликовать порт при запуске контейнера, что-то вроде :

docker run -d -p 3000:3000 my-image 

Затем используйте docker inspect, чтобы получить IP-адрес запущенного контейнера, и это то, что вы используете для host в файле запуска.

+0

Большое спасибо, это мне очень помогло! Но еще одно: мне нужно импортировать 'ptvsd' в каждый скрипт' .py', который у меня есть? Потому что это будет много с Оду. Есть ли лучший способ, например, один импорт для каждого проекта? – Brotbret

+0

Просто успел попробовать его по-своему, к сожалению, он не работает. Каждый раз, когда я пытаюсь отлаживать, я получаю эту ошибку в моей консоли отладки: – Brotbret

+0

Извините, просто привык к StackOverflow. Эта ошибка: 'Ошибка при запуске сервера отладки. Ошибка = {«код»: «ECONNREFUSED», «errno»: «ECONNREFUSED», «syscall»: «connect», «address»: «172.21.0.4», «port»: 3000} Ошибка при запуске сервер отладки. Ошибка = {«код»: «ECONNREFUSED», «errno»: «ECONNREFUSED», «syscall»: «connect», «address»: «172.21.0.4», «port»: 3000} ' (я получаю тот же выход дважды) Любые идеи могут быть? – Brotbret

Смежные вопросы