Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python docker中的ngrok无法连接到Django开发服务器_Python_Django_Docker_Docker Compose_Ngrok - Fatal编程技术网

Python docker中的ngrok无法连接到Django开发服务器

Python docker中的ngrok无法连接到Django开发服务器,python,django,docker,docker-compose,ngrok,Python,Django,Docker,Docker Compose,Ngrok,我正在使用本地主机django Web服务器http://localhost:8000,它工作正常。 同时,我需要ngrok做端口转发,ngrok http8000,它也可以正常工作 然后我想把ngrok、postgres、redis、maildev等都放在docker容器中,除了ngrok,其他的都可以 ngrok无法包含到localhost:8000的数据 我理解为什么,我想是因为ngrok运行在一个单独的“服务器”上,而该服务器上的本地主机没有运行web服务器 我想知道我怎样才能修好它

我正在使用本地主机django Web服务器
http://localhost:8000
,它工作正常。 同时,我需要ngrok做端口转发,
ngrok http8000
,它也可以正常工作

然后我想把ngrok、postgres、redis、maildev等都放在docker容器中,除了ngrok,其他的都可以

ngrok无法包含到localhost:8000的数据

我理解为什么,我想是因为ngrok运行在一个单独的“服务器”上,而该服务器上的本地主机没有运行web服务器

我想知道我怎样才能修好它

  • 我试着在我的docker中用
    网络模式:“主机”
    ,它不工作(MacOS)
  • 我尝试使用host.docker.internal,但由于我是自由计划用户,ngrok不允许我指定主机名
感谢您的帮助!谢谢

这是我的docker撰写文件:

    ngrok:
        image: wernight/ngrok
        ports:
            - '4040:4040'
        environment:
            - NGROK_PORT=8000
            - NGROK_AUTH=${NGROK_AUTH_TOKEN}
        network_mode: "host"
更新:

stripe有一个新工具
[stripe cli][1]
,可以做同样的事情。 照下面的方法做

stripe-cli:
      image: stripe/stripe-cli
      command: listen --api-key $STRIPE_SECRET_KEY
                    --load-from-webhooks-api
                    --forward-to host.docker.internal:8000/api/webhook/

我最终摆脱了ngrok,用serveo解决了这个问题, 这是代码,以防任何人遇到同样的问题

serveo:
    image: taichunmin/serveo
    tty: true
    stdin_open: true
    command: "ssh -o ServerAliveInterval=60 -R 80:host.docker.internal:8000 -o \"StrictHostKeyChecking no\" serveo.net"

我可以通过以下操作使其工作:

  • 指示Django使用以下命令绑定到端口8000:
    python manage.py runserver 0.0.0.0:8000
  • 通过将
    web:8000
    作为
    ngrok\u PORT
    环境变量传入,指示ngrok连接到我的docker compose文件中的
    web
    docker服务
  • 我已经在下面粘贴了我设置的截断版本

    docker-compose.yml:

    这是上面引用的env文件(即
    /ngrok/.env
    ):

    您可以省去子域和身份验证字段。我通过查看他们的

    version: '3.7'
    
    services:
      ngrok:
        image: wernight/ngrok
        depends_on:
          - web
        env_file:
          - ./ngrok/.env
        ports:
          - 4040:4040
    
      web:
        build:
          context: ./app
          dockerfile: Dockerfile.dev
        command: python manage.py runserver 0.0.0.0:8000
        env_file:
          - ./app/django-project/settings/.env
        ports:
          - 8000:8000
        volumes:
          - ./app/:/app/
    
    NGROK_AUTH=your-auth-token-here
    NGROK_DEBUG=1
    NGROK_PORT=web:8000
    NGROK_SUBDOMAIN=(optional)-your-subdomain-here