我设置了一个内部 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
由于我在一个基本的ubuntu
Docker 镜像上运行它,当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:9
docker镜像,但为了遵守询问-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
文件并将其用作源。