Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

python debug with docker-compose in vscode: Error: Could not locate a Flask application. Use the 'flask --app' option, 'FLASK_APP' environment variable, or a 'wsgi.py' or 'app.py' file in the current directory #1966

Open
yezhengli-Mr9 opened this issue Dec 31, 2023 · 1 comment
Labels

Comments

@yezhengli-Mr9
Copy link

yezhengli-Mr9 commented Dec 31, 2023

Thanks @jamescurtin for steps in https://medium.com/@lassebenninga/how-to-debug-flask-running-in-docker-compose-in-vs-code-ef37f0f516ee
I try to follow steps there to get familiar with python debug with docker-compose in vscode j2eeexpert2015/springbootdebug#1

  1. Add the debugpy library to your Dockerfile
EXPOSE 2992
EXPOSE 5000
++ RUN pip install debugpy
CMD [ "npm", "start"]

https://github.com/jamescurtin/demo-cookiecutter-flask/blob/ef61ca4503c9a9c4de338034d94ba385afc34958/Dockerfile#L54-L56

  1. Add the debugpy command to the launch script
-- "start": "run-script-os",
++ "start": "python -m debugpy --wait-for-client --listen 0.0.0.0:5678 -m flask run --host=0.0.0.0"

in https://github.com/jamescurtin/demo-cookiecutter-flask/blob/ef61ca4503c9a9c4de338034d94ba385afc34958/package.json#L9

  1. Add the “Python: Remote Attach” option to launch.json so result exact same file:
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Remote Attach",
            "type": "python",
            "request": "attach",
            "connect": {
                "host": "localhost",
                "port": 5678
            },
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}",
                    "remoteRoot": "."
                }
            ],
            "justMyCode": true
        }
    ]
}
  1. Expose port 5678 in docker-compose.yml
services:
  flask-dev:
    build:
      context: .
      target: development
      args:
        <<: *build_args
    image: "my_flask_app-development"
    ports:
      - "8080:5000"
      - "2992:2992"
++    - "5678:5678"
    <<: *default_volumes

https://github.com/jamescurtin/demo-cookiecutter-flask/blob/ef61ca4503c9a9c4de338034d94ba385afc34958/docker-compose.yml#L13-L24

  1. tart the container and debugger
docker-compose build
docker-compose build
Building flask-dev
[+] Building 56.2s (24/24) FINISHED                                                                                                                                                          docker:default
 => [internal] load .dockerignore                                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                                        0.0s
 => [internal] load build definition from Dockerfile                                                                                                                                                   0.0s
 => => transferring dockerfile: 1.78kB                                                                                                                                                                 0.0s
 => [internal] load metadata for docker.io/library/node:20-buster-slim                                                                                                                                 0.9s
 => [internal] load metadata for docker.io/library/python:3.11-slim-buster                                                                                                                             1.0s
 => [internal] load build context                                                                                                                                                                      0.0s
 => => transferring context: 95.11kB                                                                                                                                                                   0.0s
 => [builder  1/15] FROM docker.io/library/python:3.11-slim-buster@sha256:c46b0ae5728c2247b99903098ade3176a58e274d9c7d2efeaaab3e0621a53935                                                            21.7s
 => => resolve docker.io/library/python:3.11-slim-buster@sha256:c46b0ae5728c2247b99903098ade3176a58e274d9c7d2efeaaab3e0621a53935                                                                       0.0s
 => => sha256:c46b0ae5728c2247b99903098ade3176a58e274d9c7d2efeaaab3e0621a53935 988B / 988B                                                                                                             0.0s
 => => sha256:b94af75d4ff65c50bf1b2119bca6d0ba707037bacd0cb75314801a6953c03241 1.37kB / 1.37kB                                                                                                         0.0s
 => => sha256:db841a2e8ab326bf1101c5714186094fa05d3277c5b2dbcec943dade361b269f 6.83kB / 6.83kB                                                                                                         0.0s
 => => sha256:8b91b88d557765cd8c6802668755a3f6dc4337b6ce15a17e4857139e5fc964f3 27.14MB / 27.14MB                                                                                                      20.4s
 => => sha256:824416e234237961c9c5d4f41dfe5b295a3c35a671ee52889bfb08d8e257ec4c 2.78MB / 2.78MB                                                                                                         3.5s
 => => sha256:482d64d97d4e63625e51301e23ca7ff526afaf40710da26704d9ce2e1a6168fa 12.00MB / 12.00MB                                                                                                       2.9s
 => => sha256:c87b3089b2ed5584d9a52ddf02017556958f287dd63945476fbcd191954e6faf 244B / 244B                                                                                                             3.0s
 => => sha256:91bdacd599c69598dd6fbd7f97f7059b565f6f3015a04b6ab9e8db254a41652c 3.38MB / 3.38MB                                                                                                         3.7s
 => => extracting sha256:8b91b88d557765cd8c6802668755a3f6dc4337b6ce15a17e4857139e5fc964f3                                                                                                              0.6s
 => => extracting sha256:824416e234237961c9c5d4f41dfe5b295a3c35a671ee52889bfb08d8e257ec4c                                                                                                              0.1s
 => => extracting sha256:482d64d97d4e63625e51301e23ca7ff526afaf40710da26704d9ce2e1a6168fa                                                                                                              0.2s
 => => extracting sha256:c87b3089b2ed5584d9a52ddf02017556958f287dd63945476fbcd191954e6faf                                                                                                              0.0s
 => => extracting sha256:91bdacd599c69598dd6fbd7f97f7059b565f6f3015a04b6ab9e8db254a41652c                                                                                                              0.2s
 => [node 1/1] FROM docker.io/library/node:20-buster-slim@sha256:d0acb10d0062944abd19d56d79f4953de6bba167b04c961c6eba6054fbc4990c                                                                     19.6s
 => => resolve docker.io/library/node:20-buster-slim@sha256:d0acb10d0062944abd19d56d79f4953de6bba167b04c961c6eba6054fbc4990c                                                                           0.0s
 => => sha256:d0acb10d0062944abd19d56d79f4953de6bba167b04c961c6eba6054fbc4990c 549B / 549B                                                                                                             0.0s
 => => sha256:f31eeec1562e60912424355ef3b2dc082346c3c7f6a956f1337c6a234f1c06f3 1.37kB / 1.37kB                                                                                                         0.0s
 => => sha256:afe23aad037311e07c276229da35a987375fcb6023194877975c6d7e8e1a055a 7.62kB / 7.62kB                                                                                                         0.0s
 => => sha256:faac0b3889808c27af96e662a1082eef35772c35dcee1c7334f5f5a22b4149d7 27.19MB / 27.19MB                                                                                                      18.1s
 => => sha256:477d7c8346e1afefc9fa26c61e951b3dec17f8e40c17f13433da7486f5068e42 4.19kB / 4.19kB                                                                                                         3.8s
 => => sha256:9620175e3d55a49550c205e8a6123fb2601e00d5ed8f9121f2e73e8a5d8152c7 40.46MB / 40.46MB                                                                                                      13.0s
 => => sha256:5804f87db643f8da1d653309a98d35bfe9e842ab408b70343d7324dd6944d9a9 2.67MB / 2.67MB                                                                                                        13.5s
 => => sha256:e12b69f2ed72122d28c7b16ab7e0f32d4ce164641c23206ad45a9940b30f4af7 453B / 453B                                                                                                            13.7s
 => => extracting sha256:faac0b3889808c27af96e662a1082eef35772c35dcee1c7334f5f5a22b4149d7                                                                                                              0.6s
 => => extracting sha256:477d7c8346e1afefc9fa26c61e951b3dec17f8e40c17f13433da7486f5068e42                                                                                                              0.0s
 => => extracting sha256:9620175e3d55a49550c205e8a6123fb2601e00d5ed8f9121f2e73e8a5d8152c7                                                                                                              0.6s
 => => extracting sha256:5804f87db643f8da1d653309a98d35bfe9e842ab408b70343d7324dd6944d9a9                                                                                                              0.0s
 => => extracting sha256:e12b69f2ed72122d28c7b16ab7e0f32d4ce164641c23206ad45a9940b30f4af7                                                                                                              0.0s
 => [builder  2/15] WORKDIR /app                                                                                                                                                                       0.2s
 => [builder  3/15] COPY --from=node /usr/local/bin/ /usr/local/bin/                                                                                                                                   0.2s
 => [builder  4/15] COPY --from=node /usr/lib/ /usr/lib/                                                                                                                                               0.1s
 => [builder  5/15] RUN true                                                                                                                                                                           0.3s
 => [builder  6/15] COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules                                                                                                           0.1s
 => [builder  7/15] COPY requirements requirements                                                                                                                                                     0.0s
 => [builder  8/15] RUN pip install --no-cache -r requirements/prod.txt                                                                                                                                7.0s
 => [builder  9/15] COPY package.json ./                                                                                                                                                               0.0s
 => [builder 10/15] RUN npm install                                                                                                                                                                   10.3s
 => [builder 11/15] COPY webpack.config.js autoapp.py ./                                                                                                                                               0.1s 
 => [builder 12/15] COPY my_flask_app my_flask_app                                                                                                                                                     0.0s 
 => [builder 13/15] COPY assets assets                                                                                                                                                                 0.0s 
 => [builder 14/15] COPY .env.example .env                                                                                                                                                             0.0s 
 => [builder 15/15] RUN npm run-script build                                                                                                                                                           3.8s
 => [development 1/2] RUN pip install --no-cache -r requirements/dev.txt                                                                                                                               5.9s
 => [development 2/2] RUN pip install debugpy                                                                                                                                                          2.0s
 => exporting to image                                                                                                                                                                                 3.4s
 => => exporting layers                                                                                                                                                                                3.4s
 => => writing image sha256:42e85e68acea7d471b3960908bf8f28b0df18db81b1542b821be1df565c916b6                                                                                                           0.0s
 => => naming to docker.io/library/my_flask_app-development                                                                                                                                            0.0s
Building flask-prod
[+] Building 9.2s (30/30) FINISHED                                                                                                                                                           docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                   0.0s
 => => transferring dockerfile: 1.78kB                                                                                                                                                                 0.0s
 => [internal] load .dockerignore                                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/python:3.11-slim-buster                                                                                                                             0.3s
 => [internal] load metadata for docker.io/library/node:20-buster-slim                                                                                                                                 0.3s
 => [internal] load build context                                                                                                                                                                      0.1s
 => => transferring context: 342.64kB                                                                                                                                                                  0.1s
 => [builder  1/15] FROM docker.io/library/python:3.11-slim-buster@sha256:c46b0ae5728c2247b99903098ade3176a58e274d9c7d2efeaaab3e0621a53935                                                             0.0s
 => [node 1/1] FROM docker.io/library/node:20-buster-slim@sha256:d0acb10d0062944abd19d56d79f4953de6bba167b04c961c6eba6054fbc4990c                                                                      0.0s
 => CACHED [builder  2/15] WORKDIR /app                                                                                                                                                                0.0s
 => [production  3/10] RUN useradd -m sid                                                                                                                                                              0.3s
 => CACHED [builder  3/15] COPY --from=node /usr/local/bin/ /usr/local/bin/                                                                                                                            0.0s
 => CACHED [builder  4/15] COPY --from=node /usr/lib/ /usr/lib/                                                                                                                                        0.0s
 => CACHED [builder  5/15] RUN true                                                                                                                                                                    0.0s
 => CACHED [builder  6/15] COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules                                                                                                    0.0s
 => CACHED [builder  7/15] COPY requirements requirements                                                                                                                                              0.0s
 => CACHED [builder  8/15] RUN pip install --no-cache -r requirements/prod.txt                                                                                                                         0.0s
 => CACHED [builder  9/15] COPY package.json ./                                                                                                                                                        0.0s
 => CACHED [builder 10/15] RUN npm install                                                                                                                                                             0.0s
 => CACHED [builder 11/15] COPY webpack.config.js autoapp.py ./                                                                                                                                        0.0s
 => CACHED [builder 12/15] COPY my_flask_app my_flask_app                                                                                                                                              0.0s
 => CACHED [builder 13/15] COPY assets assets                                                                                                                                                          0.0s
 => CACHED [builder 14/15] COPY .env.example .env                                                                                                                                                      0.0s
 => CACHED [builder 15/15] RUN npm run-script build                                                                                                                                                    0.0s
 => [production  4/10] RUN chown -R sid:sid /app                                                                                                                                                       0.3s
 => [production  5/10] COPY --from=builder --chown=sid:sid /app/my_flask_app/static /app/my_flask_app/static                                                                                           0.1s
 => [production  6/10] COPY requirements requirements                                                                                                                                                  0.0s
 => [production  7/10] RUN pip install --no-cache --user -r requirements/prod.txt                                                                                                                      7.2s
 => [production  8/10] COPY supervisord.conf /etc/supervisor/supervisord.conf                                                                                                                          0.1s
 => [production  9/10] COPY supervisord_programs /etc/supervisor/conf.d                                                                                                                                0.0s 
 => [production 10/10] COPY . .                                                                                                                                                                        0.0s 
 => exporting to image                                                                                                                                                                                 0.7s 
 => => exporting layers                                                                                                                                                                                0.7s 
 => => writing image sha256:3362d9c720d9bef018d60fde317688a382b64b02b220bf003fea2e8dd3cb8a7d                                                                                                           0.0s 
 => => naming to docker.io/library/my_flask_app-production                                                                                                                                             0.0s
Building manage
[+] Building 0.3s (24/24) FINISHED                                                                                                                                                           docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                   0.0s
 => => transferring dockerfile: 1.78kB                                                                                                                                                                 0.0s
 => [internal] load .dockerignore                                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/node:20-buster-slim                                                                                                                                 0.3s
 => [internal] load metadata for docker.io/library/python:3.11-slim-buster                                                                                                                             0.3s
 => [internal] load build context                                                                                                                                                                      0.0s
 => => transferring context: 2.16kB                                                                                                                                                                    0.0s
 => [node 1/1] FROM docker.io/library/node:20-buster-slim@sha256:d0acb10d0062944abd19d56d79f4953de6bba167b04c961c6eba6054fbc4990c                                                                      0.0s
 => [builder  1/15] FROM docker.io/library/python:3.11-slim-buster@sha256:c46b0ae5728c2247b99903098ade3176a58e274d9c7d2efeaaab3e0621a53935                                                             0.0s
 => CACHED [builder  2/15] WORKDIR /app                                                                                                                                                                0.0s
 => CACHED [builder  3/15] COPY --from=node /usr/local/bin/ /usr/local/bin/                                                                                                                            0.0s
 => CACHED [builder  4/15] COPY --from=node /usr/lib/ /usr/lib/                                                                                                                                        0.0s
 => CACHED [builder  5/15] RUN true                                                                                                                                                                    0.0s
 => CACHED [builder  6/15] COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules                                                                                                    0.0s
 => CACHED [builder  7/15] COPY requirements requirements                                                                                                                                              0.0s
 => CACHED [builder  8/15] RUN pip install --no-cache -r requirements/prod.txt                                                                                                                         0.0s
 => CACHED [builder  9/15] COPY package.json ./                                                                                                                                                        0.0s
 => CACHED [builder 10/15] RUN npm install                                                                                                                                                             0.0s
 => CACHED [builder 11/15] COPY webpack.config.js autoapp.py ./                                                                                                                                        0.0s
 => CACHED [builder 12/15] COPY my_flask_app my_flask_app                                                                                                                                              0.0s
 => CACHED [builder 13/15] COPY assets assets                                                                                                                                                          0.0s
 => CACHED [builder 14/15] COPY .env.example .env                                                                                                                                                      0.0s
 => CACHED [builder 15/15] RUN npm run-script build                                                                                                                                                    0.0s
 => CACHED [development 1/2] RUN pip install --no-cache -r requirements/dev.txt                                                                                                                        0.0s
 => CACHED [development 2/2] RUN pip install debugpy                                                                                                                                                   0.0s
 => exporting to image                                                                                                                                                                                 0.0s
 => => exporting layers                                                                                                                                                                                0.0s
 => => writing image sha256:42e85e68acea7d471b3960908bf8f28b0df18db81b1542b821be1df565c916b6                                                                                                           0.0s
 => => naming to docker.io/library/my_flask_app-manage                                            

and then

docker-compose up flask-dev
Starting demo-cookiecutter-flask_flask-dev_1 ... done
Attaching to demo-cookiecutter-flask_flask-dev_1
flask-dev_1   | 
flask-dev_1   | > my_flask_app@1.0.0 start
flask-dev_1   | > python -m debugpy --wait-for-client --listen 0.0.0.0:5678 -m flask run --host=0.0.0.0
flask-dev_1   | 
flask-dev_1   | 0.00s - Debugger warning: It seems that frozen modules are being used, which may
flask-dev_1   | 0.00s - make the debugger miss breakpoints. Please pass -Xfrozen_modules=off
flask-dev_1   | 0.00s - to python to disable frozen modules.
flask-dev_1   | 0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.
flask-dev_1   | Usage: python -m flask run [OPTIONS]
flask-dev_1   | Try 'python -m flask run --help' for help.
flask-dev_1   | 
flask-dev_1   | Error: Could not locate a Flask application. Use the 'flask --app' option, 'FLASK_APP' environment variable, or a 'wsgi.py' or 'app.py' file in the current directory.
demo-cookiecutter-flask_flask-dev_1 exited with code 2

Project configuration:

Option Values
use_pipenv
  • yes
  • no
python_version
  • 3.11
  • 3.10
  • 3.9
  • 3.8
node_version
  • 20
  • 18
  • node -v v12.22.9; npm -v 8.5.1
use_heroku
  • yes
  • no
Are you using Docker to run the app?
  • yes
  • no
@yezhengli-Mr9
Copy link
Author

yezhengli-Mr9 commented Dec 31, 2023

Step 1,2 are consistent with hints in https://code.visualstudio.com/docs/containers/docker-compose for python

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant