【问题标题】:Running Ngrok in a container using docker使用 docker 在容器中运行 Ngrok
【发布时间】:2019-05-05 21:01:41
【问题描述】:

[https://github.com/gtriggiano/ngrok-tunnel ] 在容器内运行 ngrok。 Ngrok 需要在容器中运行以规避安全风险。但是在运行脚本后我遇到了问题,它会生成 url

$ docker pull gtriggiano/ngrok-tunnel


$ docker run -it  -e "TARGET_HOST=localhost" -e "TARGET_PORT=3000" -p 4040 gtriggiano/ngrok-tunnel

我在 localhost:3000 上运行我的 Rails 应用程序

这是我的问题还是可以通过更改脚本(在 repo 内)来解决?

【问题讨论】:

    标签: docker ngrok


    【解决方案1】:

    我无法让这个工作,但切换到https://github.com/shkoliar/docker-ngrok,它工作得很好。

    在我的例子中,我将它添加到我的 docker-compose.yml 文件中:

    ngrok:
        image: shkoliar/ngrok:latest
        ports:
          - 4551:4551
        links:
          - web
        environment:
          - PARAMS=http -region=eu localdev.docker:80
        networks:
          dev_net:
            ipv4_address: 10.5.0.10
    

    当我做docker-compose up -d时,一切都是从其他事情开始的

    然后有一个位于 http://localhost:4551/ 的 Web UI 供您查看状态、请求、ngrok URL 等。

    Github 页面也有从命令行手动运行它的示例,而不是通过 docker-compose:

    命令行示例 下面的示例假设您已经运行 名为 dev_web_1 的 web 服务器 docker 容器,暴露了 80 端口。

    docker run --rm -it --link dev_web_1 shkoliar/ngrok ngrok http dev_web_1:80

    使用命令行,ngrok 会话一直处于活动状态,直到它 不会被Ctrl+C组合终止。

    【讨论】:

      【解决方案2】:

      没有。如果您使用单个数字执行 -p 它是容器端口 - 主机端口是随机分配的。 在 docker run 使用 -p, --publish ip:[hostPort]:containerPort 可以指定主机端口和容器端口。

      截至目前,容器的 4040 已暴露。不确定您的服务是否默认侦听它。

      获取本地端口执行

      docker ps
      

      你会看到它没有监听的实际端口。

      CONTAINER ID        IMAGE                     COMMAND             CREATED              STATUS              PORTS                     NAMES
      1aaaeffe789d        gtriggiano/ngrok-tunnel   "npm start"         About a minute ago   Up About a minute   0.0.0.0:32768->4040/tcp   wizardly_poincare
      

      这里正在监听 localhost:32768

      【讨论】:

      • 那么为什么会有 TARGET_HOST 和 TARGET_PORT ?谢谢回答
      • 当我尝试在指定的端口中运行我的 rails 应用程序时,我在使用中遇到错误
      • 启动容器后。你如何运行应用程序?一个端口也只能给一个进程。所以这很正常。
      • 我仍然不清楚如何构建命令才能按预期运行隧道,因为docker run -it -e "TARGET_HOST=localhost" -e "TARGET_PORT=44332" -p, --publish ip:44332:containerPort 4040 gtriggiano/ngrok-tunnel 给了我与 OP 相同的错误。我是否必须将我的应用程序端口更改为通过docker ps 获得的随机分配的端口?
      【解决方案3】:

      我不确定你是否已经解决了这个问题,但是当我收到这个错误时,我只能这样解决它:

      # docker-compose.yml
      
      networks:
        - development
      

      我还需要公开我的网络容器的 3000 端口,因为它仍然没有公开。

      # docker.compose.yml
      
      web:
        expose:
          - "3000"
      

      我在开发中运行的服务器容器也在development 网络下。我相信,您应该传递给容器执行的唯一参数是imageportsenvironment,其中服务器容器的 DOMAIN 和 PORT、link 和 Web 容器上的 expose

      # docker-compose.yml
      
        ngrok:
          image: shkoliar/ngrok
          ports:
            - 4551:4551
          links:
            - web
          networks:
            - development
          environment:
            - DOMAIN=squad_web
            - PORT=3000
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-04
        • 2015-03-05
        • 1970-01-01
        • 2022-01-20
        • 2016-02-04
        • 2023-04-05
        • 1970-01-01
        • 2019-01-19
        相关资源
        最近更新 更多