作为非常著名的 ngrok 的替代方案,我曾经使用
efrecon/localtunnel
docker 镜像在互联网上公开我的 http 服务器以进行测试。
对于 Linux,我曾经:
efrecon/localtunnel
启动运行 --network host
图像的容器:
docker run -it -d --name localtunnel --network host efrecon/localtunnel --port 8080
export LOCAL_TUNNEL_URL=$(docker logs localtunnel | cut -d ' ' -f 4)
curl $LOCAL_TUNNEL_URL/hello
当然,对于 MacO,不可能使用
--network=host
标志,但我没有找到执行相同操作的正确方法。
我尝试了多种组合,例如:
docker run -it -d --name localtunnel -p 8443:8080 efrecon/localtunnel --port 8080
curl $LOCAL_TUNNEL_URL:8443/hello
docker run -it -d --name localtunnel -p 443:8080 efrecon/localtunnel --port 8080
curl $LOCAL_TUNNEL_URL/hello
docker run -it -d --name localtunnel -p 80:8080 efrecon/localtunnel --port 8080
curl $LOCAL_TUNNEL_URL/hello
docker run -it -d --name localtunnel -p 9090:8080 efrecon/localtunnel --port 8080
curl $LOCAL_TUNNEL_URL:9090/hello
但他们都没有给我结果,只有一个悬而未决的请求无限期地等待实现。 有关如何配置本地隧道远程端口转发的直接经验吗?
有趣的问题,我认为文档中未指定某些内容,这就是您遇到此问题的原因。
我认为这是不可行的,因为Localtunnel的docker版本,实现反向端口转发,需要将呼叫重定向到的进程位于同一主机上,所以
localhost:8080
。问题有两个:您无法通过 -p 8080:8080
,因为本地计算机上的端口 8080 已被本地服务器进程占用,除此之外,即使这是可能的,远程主机也会将调用转发到容器在端口 8080 上,您的进程应该可以在容器的 localhost:8080 上访问,但事实并非如此,因为服务器进程位于容器外部。
Linux 的优点是 Docker 可以共享主机网络,这不仅意味着每个容器都可以通过 localhost 访问,而且相反,这意味着每个容器也可以访问 localhost 上的任何其他容器或本地进程。