【问题标题】:Address already in use (Errno 98) django with vscode and docker地址已在使用 (Errno 98) django 与 vscode 和 docker
【发布时间】:2018-11-30 01:52:37
【问题描述】:

我有一个带有 django 的 python 应用程序,我在一个 docker 容器中运行它。我需要调试这个应用程序,每次我做 docker-compose up 它都会在下面给出这个错误。我查看了几个有关如何调试的站点,但没有一个解决方案对我有帮助。有谁知道会是什么?我认为您要评估的最重要的文件如下,如果需要更多我编辑帖子。 我正在使用 django 2.0.1、ptvsd 3.2.1 和 Docker-Toolbox。

File "manage.py", line 10, in <module>    ptvsd.enable_attach(secret='my_secret', address = ('192.168.99.100', 3000))
File "/usr/local/lib/python3.6/site-packages/ptvsd/__init__.py", line 87, in enable_attach
return _attach_server().enable_attach(secret, address, certfile, keyfile, redirect_output)
File "/usr/local/lib/python3.6/site-packages/ptvsd/attach_server.py", line 109, in enable_attach
server.bind(address)
OSError: [Errno 99] Cannot assign requested addres

s

manage.py:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "chatire.settings")
    try:
        from django.core.management import execute_from_command_line
        import ptvsd
        ptvsd.enable_attach(secret='my_secret', address = ('192.168.99.100', 3000))
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc



    execute_from_command_line(sys.argv)

docker-compose.yml:

version: '3'
services:
  db:
    image: postgres
  backend:
    build: .
    command: bash app.sh
    volumes:
      - .:/code
    ports:
      - "3000:3000"
      - "8000:8000"
    depends_on:
      - db
  frontend:
    build: ./chatire-frontend
    command: bash front.sh
    volumes:
      - ./chatire-frontend:/to-do-app
    ports:
      - "8080:8080"
      - "8081:8081"
  rabbit1:
    image: "rabbitmq:3-management"
    hostname: "rabbit1"
    environment:
      RABBITMQ_ERLANG_COOKIE: "SWQOKODSQALRPCLNMEQG"
      RABBITMQ_DEFAULT_USER: "guest"
      RABBITMQ_DEFAULT_PASS: "guest"
      RABBITMQ_DEFAULT_VHOST: "/"
    ports:
      - "15672:15672"
      - "5672:5672"
    labels:
      NAME: "rabbitmq1"
    volumes:
      - "./rabbitmq-compose/enabled_plugins:/etc/rabbitmq/enabled_plugins"
      #- "./rabbitmq.config:/etc/rabbitmq/rabbitmq.config:ro"
      #- "./autocluster-0.4.1.ez:/usr/lib/rabbitmq/lib/rabbitmq_server-3.5.5/plugins/autocluster-0.4.1.ez"

Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
EXPOSE 3000

requirements.txt:

amqp==2.2.2
billiard==3.5.0.3
celery==4.1.0
Django==2.0.1
django-cors-headers==2.1.0
django-notifs==2.6.0
django-templated-mail==1.0.0
djangorestframework==3.7.7
djangorestframework-jwt==1.11.0
djoser==1.1.5
gevent==1.2.2
greenlet==0.4.12
kombu==4.1.0
pika==0.11.2
PyJWT==1.6.1
pytz==2017.3
simplejson==3.13.2
six==1.11.0
uWSGI==2.0.15
vine==1.1.4
psycopg2==2.7.4
psycopg2-binary==2.7.4
ptvsd==3.2.1 

【问题讨论】:

  • 好吧显然已经有一个程序在该端口上运行,使用lsof -i检查哪些程序侦听哪些端口。

标签: python django docker visual-studio-code


【解决方案1】:

来自 quinox 在 Github 上的回答 (https://github.com/Microsoft/PTVS/issues/1057#issuecomment-421549892):

要使用自动重新加载功能,您可以使 VSCode 仅附加在主进程中。基于 Django 的 utils/autoreload.py 和 Django-Extensions 的 management/commands/runserver_plus.py:

if os.environ.get('RUN_MAIN') or os.environ.get('WERKZEUG_RUN_MAIN'): ptvsd.enable_attach(address=('0.0.0.0', 7913), redirect_output=True)

【讨论】:

    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 2021-05-14
    • 2015-06-04
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多