我正在使用localhost django网络服务器http://localhost:8000
,该服务器工作正常。同时,我需要ngrok进行端口转发ngrok http 8000
,它也可以正常工作。
然后,我想将ngrok,postgres,redis,maildev等全部放入docker容器中,除ngrok之外,其他所有东西都可以正常工作。
ngrok无法包含到localhost:8000。
[我理解为什么,我想是因为ngrok在单独的'服务器'上运行,并且该服务器上的本地主机没有运行Web服务器。
我想知道如何解决它。
network_mode: "host"
,它不起作用(MacOS)。任何帮助表示赞赏!谢谢。
这是我的docker-compose文件:
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"
我能够通过执行以下操作使其起作用:
python manage.py runserver 0.0.0.0:8000
web
作为web:8000
环境变量传入,指示ngrok连接到我的docker组成文件中的NGROK_PORT
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/
这是上面引用的环境文件(即./ngrok/.env
:]
NGROK_AUTH=your-auth-token-here
NGROK_DEBUG=1
NGROK_PORT=web:8000
NGROK_SUBDOMAIN=(optional)-your-subdomain-here
您可以忽略子域和身份验证字段。我通过查看他们的docker entrypoint
来解决这个问题