检查是否存在合适的代理

检查是否存在合适的代理

我设置了一个内部 apt 代理,主要用于我们的开发环境的 Docker 容器。

因此在我的心中Dockerfile我可能会有:

FROM ubuntu
RUN echo 'Acquire::http::Proxy "http://<proxy-ip>:<proxy-port>/";' > /etc/apt/apt.conf.d/proxy.conf

但这只有当我在防火墙内构建 Docker 映像时才会起作用。

由于我也想在云服务主机上构建该 Docker 映像,因此将无法访问:并且这样做也没有意义,所以我认为在配置 apt-proxy 客户端之前会进行检查:

RUN <check-connection> http://<proxy-ip>:<proxy-port>/ && \
    echo 'Acquire::http::Proxy "http://<proxy-ip>:<proxy-port>/";' > /etc/apt/apt.conf.d/proxy.conf

由于我在一个基本的ubuntuDocker 镜像上运行它,当apt尚未配置时,我对该<check-connection>工具的使用有些限制,无法验证http://<proxy-ip>:<proxy-port>/是否按预期响应。

到目前为止我得到的最佳解决方案是询问apt自己是否可以连接:

apt -o Acquire::http::Proxy="http://<proxy-ip>:<proxy-port>/" update

当我的代理可以响应时,这会很好地工作,但如果不能,则需要很长时间才会失败。

我接下来做的事情是使用该timeout实用程序来限制失败的时间:

timeout 10 apt -o Acquire::http::Proxy="http://<proxy-ip>:<proxy-port>/" update

但是超时(这里是 10 秒)可能太短或太长。

我的问题是:在基本的 Debian 主机(读取 Dockerubuntu映像)上,检查 apt-proxy 是否可访问的最佳(最快和最强大)方法是什么?


编辑:最初的问题提到了debian:9docker镜像,但为了遵守询问-Ubuntu的指导方针我也用它进行了测试ubuntu:latest,得到了相同的结果,并更新了问题。

答案1

您可以使用 bash 测试是否可以与给定主机和端口建立 TCP 连接:

bash -c 'read -t0 < /dev/tcp/<proxy-ip>/<proxy-port>'

这不会检查另一端的服务是否是代理,而只是检查另一端是否有东西在监听。

另一个选择是apt-get为单个存储库运行,例如,通过写入deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) restricted文件并将其用作源。

相关内容