VS код запуска и отладки Python в Docker с использованием docker -compose - PullRequest
0 голосов
/ 29 марта 2020

Настройка VS Code для простой в использовании среды. Я хотел бы иметь простой способ запустить Python скрипт в Docker и присоединить отладчик.

Что у меня хорошо работает:

  1. Создан Dockerfile и docker -compose.yaml для запуска docker -compose | start правильно.
  2. Я могу подключиться к , работает docker контейнер и отладить мой код.

Что я хочу получить?

Одна кнопка для запуска и прикрепления одновременно.

Мне нужно запустить приложение, используя docker -compose. Я не хочу настраивать docker запускать задачи в VS Code.

Мой код и идеи:

Dockerfile:

FROM python:3.6-alpine
RUN mkdir -p /work/
WORKDIR /work/
COPY ./python/requirements.txt ./requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
COPY ./python/src/ .
CMD python -m ptvsd --host 0.0.0.0 --port 5678 --wait run.py < tests/input.txt > tests/output.txt

docker -compose.yaml

version: "3.7"
services:
    py-service:
        container_name: py-container
        image: py-image
        build:
            context: ./
        volumes:
            - ./python/src/:/work
        ports:
            - 5678:5678

запуск. json конфигурации:

   { // simple attach to running container - works good
        "name": "Python Attach",
        "type": "python",
        "request": "attach",
        "pathMappings": [
            {
                "localRoot": "${workspaceFolder}/python/src/",
                "remoteRoot": "/work/"
            }
        ],
        "port": 5678,
        "host": "127.0.0.1"
    },
    { // launch docker container and attach to debugger - NOT works
        "name": "Run Py in Docker",
        "type": "docker",
        "request": "launch",
        "platform": "python",
        "preLaunchTask": "docker-compose-start",
        "python": {
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}/python/src/",
                    "remoteRoot": "/work/"
                }
            ],
            "projectType": "general",
            "host": "127.0.0.1",
            "port": 5678,
        },
    },

задач. json для запуска docker -compose команда

{
  "label": "docker-compose-start",
  "type": "shell",
  "command": "docker-compose up"
},

Проблема в том, что выполнение Запуск Py в Docker обычно запускает мой контейнер, но не может присоединить отладчик и завершается неудачно по истечении времени. Пока контейнер еще работает и ждет вложения. Можно ли это как-то исправить?

ОБНОВЛЕНИЕ

Наконец я смог запустить и отладить! Вот мое задание. json:

{
  "label": "docker-compose-start",
  "type": "shell",
  "command": "docker-compose up --build -d",
  "isBackground": true,
  "problemMatcher": [
    {
      "pattern": [{ "regexp": ".", "file": 1, "location": 2, "message": 3, }],
      "background": {
        "activeOnStart": true,
        "beginsPattern": "^(Building py-service)$",
        "endsPattern": "^(Creating|Recreating|Starting) (py-container) ... (done)$",
      }
    },
  ],
},

запуск. json:

{
    "name": "run py",
    "type": "python",
    "request": "attach",
    "preLaunchTask": "docker-compose-start",
    "pathMappings": [
        {
            "localRoot": "${workspaceFolder}/python/src/",
            "remoteRoot": "/work/"
        }
    ],
    "port": 5678,
    "host": "127.0.0.1"
},

После всего, что я получил неудобство с отображением всех выводов docker up | build в задачи. VS Code каждый раз просит продолжить, но Enter помогает.

1 Ответ

0 голосов
/ 29 марта 2020

docker-compose up - это запуск на переднем плане (захват стандартного ввода, печать стандартного вывода ... и ожидание исходящей команды / сигнала )

Для вас более подходящим является фоновый запуск ( `docker compose up -d ', см. Флаг d (отсоединен) ). Эта команда запускает контейнер и передает управление следующей команде (присоединение).

ОБНОВЛЕНИЕ:

Если фоновый запуск не помогает, попробуйте запустить в фоновом режиме и это решение .

...