使用 docker 在容器中运行 Ngrok
Posted
技术标签:
【中文标题】使用 docker 在容器中运行 Ngrok【英文标题】:Running Ngrok in a container using docker 【发布时间】: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 内)来解决?
【问题讨论】:
【参考方案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
网络下。我相信,您应该传递给容器执行的唯一参数是image
、ports
、environment
,其中服务器容器的 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
【讨论】:
以上是关于使用 docker 在容器中运行 Ngrok的主要内容,如果未能解决你的问题,请参考以下文章
使用 Maven 在 gitlab 中运行(Docker)测试容器