docker中的ngrok无法连接到http:// localhost:8000 Web服务器

时间:2018-10-25 01:48:41

标签: django docker ngrok

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

然后我想将ngrok,postgres,redis,maildev等全部放入docker容器中,除ngrok之外,其他所有东西都可以正常工作。

ngrok无法包含到localhost:8000。

我理解为什么,我想是因为ngrok在单独的“服务器”上运行,而该服务器上的本地主机没有运行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"

2 个答案:

答案 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)

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

  1. 使用以下命令指示Django绑定到端口8000:python manage.py runserver 0.0.0.0:8000
  2. 通过将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

来解决这个问题