Как удаленный отладочный код Python в контейнере Docker с кодом VS

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

ОБНОВИТЬ:

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

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, но по крайней мере я могу отлаживать сейчас. Благодарю!

Ответы

Ответ 1

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

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

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

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