代码之家  ›  专栏  ›  技术社区  ›  Alessandro Argentieri

在Mac上运行码头化定位器可行吗?

  •  1
  • Alessandro Argentieri  · 技术社区  · 1 年前

    作为我过去使用的非常著名的ngrok的替代品 efrecon/localtunnel docker镜像将我的http服务器公开在互联网上进行测试。

    使用linux,我曾经:

    • 启动我的本地HTTP服务器(比如在8080端口上)
    • 启动一个运行的容器 efrecon/localtunnel 图像带有 --network host :
      docker run -it -d --name localtunnel --network host efrecon/localtunnel --port 8080
      
    • 获取提供的URL:
      export LOCAL_TUNNEL_URL=$(docker logs localtunnel | cut -d ' ' -f 4)
      
    • 等等:
      curl $LOCAL_TUNNEL_URL/hello
      

    当然,对于MacO,不可能使用 --network=host flag,但我没有找到执行相同操作的正确方法。 我尝试了多种组合,如:

    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
    

    但他们都没有给我结果,只有一个悬而未决的请求,等待着无限期的实现。 有关于如何配置本地隧道远程端口转发的直接经验吗?

    1 回复  |  直到 1 年前
        1
  •  1
  •   Alessandro    1 年前

    有趣的问题,我认为是文件中没有具体说明的事情,这就是为什么你会发生这种情况。

    我认为这是不可行的,因为实现反向端口转发的Localtunnel的码头化版本需要将调用重定向到的进程位于同一主机上,等等 localhost:8080 。问题有两个:你不能通过 -p 8080:8080 因为端口8080已经被您的本地服务器进程占用在您的本地机器上,除此之外,即使可能,远程主机正在将调用转发到端口8080上的容器,您的进程应该可以在容器的localhost:8080上访问,但事实并非如此,因为服务器进程在容器之外。 Linux的优点是Docker可以共享主机网络,这不仅意味着每个容器都可以通过localhost访问,而且相反,这意味着每个集装箱也可以访问localhost上的任何其他集装箱或本地进程。