【问题标题】:ngrok in docker cannot connect to Django development serverdocker中的ngrok无法连接到Django开发服务器
【发布时间】:2019-03-29 12:43:38
【问题描述】:

我正在使用 localhost django 网络服务器 http://localhost:8000,它工作正常。 同时我需要 ngrok 进行端口转发,ngrok http 8000,它也可以正常工作。

然后我想把 ngrok、postgres、redis、maildev 等都放在 docker 容器中,除了 ngrok 之外,所有其他的都可以正常工作。

ngrok 未能包含到 localhost:8000。

我明白为什么,我想是因为 ngrok 在单独的“服务器”上运行,而该服务器上的 localhost 没有运行 Web 服务器。

我想知道如何解决它。

  • 我尝试在我的 docker-compose 文件中使用 network_mode: "host",它不工作(MacOS)。
  • 我尝试使用 host.docker.internal,但由于我是免费计划用户,ngrok 不允许我指定主机名。

感谢任何帮助!谢谢。

这是我的 docker-compose 文件:

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

【问题讨论】:

    标签: python django docker docker-compose ngrok


    【解决方案1】:

    更新:

    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"
    

    【讨论】:

      【解决方案2】:

      我能够通过执行以下操作使其工作:

      1. 使用以下命令指示 Django 绑定到端口 8000:python manage.py runserver 0.0.0.0:8000
      2. 通过将web:8000 作为NGROK_PORT 环境变量传入,指示ngrok 连接到我的docker compose 文件中的web docker 服务。

      我在下面粘贴了我的设置的截断版本。

      docker-compose.yml

      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/
      

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

      NGROK_AUTH=your-auth-token-here
      NGROK_DEBUG=1
      NGROK_PORT=web:8000
      NGROK_SUBDOMAIN=(optional)-your-subdomain-here
      

      您可以省略子域和身份验证字段。我通过查看他们的docker entrypoint 发现了这一点

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-02
        • 2019-12-23
        • 1970-01-01
        • 2015-08-26
        • 2021-08-21
        • 2017-10-11
        • 2016-10-20
        相关资源
        最近更新 更多