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



我正在开发一个本地主机 django 网络服务器http://localhost:8000,它工作正常。 同时我需要 ngrok 进行端口转发,ngrok http 8000,这也工作正常。

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

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

我明白为什么,我想是因为 ngrok 在单独的"服务器"上运行,而该服务器上的本地主机没有运行 Web 服务器。

我想知道如何解决它。

  • 我尝试在我的码头工人撰写文件中使用network_mode: "host",它不起作用(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-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,而是使用 servo 来解决问题, 这是代码,以防有人遇到同样的问题

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"

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

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

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

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/

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

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

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

最新更新