docker中的ngrok无法连接到Django development

2024-10-02 18:25:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个本地主机django webserverhttp://localhost:8000,它工作得很好。 同时,我需要ngrok执行端口转发,ngrok http 8000,这也很好。在

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

ngrok无法包含到本地主机:8000。在

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

我不知道怎么才能修好它。在

  • 我试着用我的docker编写文件 network_mode: "host",它不工作(MacOS)。在
  • 我试着用主机.docker.internal,但由于我是自由计划用户,ngrok不允许我指定主机名。在

感谢任何帮助!谢谢。在

这是我的docker compose文件:

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

Tags: 文件django端口docker服务器authlocalhosthttp
2条回答

我通过执行以下操作使其生效:

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

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

码头工人-合成.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):

^{pr2}$

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

更新:

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来解决问题, 下面是代码,以防有人遇到同样的问题

^{pr2}$

相关问题 更多 >