我正在使用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"
答案 0 :(得分:2)
我最终摆脱了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 :(得分:0)
我能够通过执行以下操作使其工作:
python manage.py runserver 0.0.0.0:8000
web
作为web:8000
环境变量传入,指示ngrok连接到我的docker compose文件中的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
来解决这个问题