如何给 Docker 配置透明代理

前言 通常,代理通常有两种方式,一种是开放端口,让需要代理的应用主动通过暴露的端口被代理访问远程服务;一种是使用 tun mode,即虚拟网卡模式,所有流量都会被虚拟网卡设备拦截从而被动代理访问远程服务。 对我来说,我并不希望在我的服务器上采取被动方式,因为它会对服务器上的所有应用产生影响,而且一旦代理软件崩溃退出,我将无法访问互联网,而且会影响比如 ping 等工具的执行(拦截 ICMP 数据包),这是极其不好的,因此平时在我的服务器上,我更倾向于使用主动方式,只有应用需要被代理才会主动去访问代理端口。 说是主动,也并不完全主动,无非就是设置环境变量: export http_proxy=http://127.0.0.1:7890 export https_proxy=http://127.0.0.1:7890 但是,对于 Docker 来说,通过设置环境变量的方式来配置代理会非常麻烦,如果不使用 docker compose,每次运行 docker run 的时候都需要输入长长的一串环境变量;如果使用 docker compose,要修改的部分也非常多,如下所示: services: app: image: my-app environment: - HTTP_PROXY=http://host.docker.internal:7890 - HTTPS_PROXY=http://host.docker.internal:7890 - NO_PROXY=localhost,127.0.0.1 extra_hosts: - "host.docker.internal:host-gateway" # only for linux 除此之外,使用主动代理还有其他弊端: 如果 docker compose 中有多个 service,你可能需要花费功夫判断哪些 service 需要代理,哪些不需要代理。 如果镜像中的应用不支持通过环境变量配置代理,那么以上配置就完全无效了。 最重要的,在 docker build 的过程中,Docker 会起一个临时容器来运行 dockerfile 中的命令,而在这个过程中,如果没有配置代理或镜像,那么一些基本的命令,比如 apt update、apt install 以及 pip install 等等,就会导致镜像构建缓慢,非常折磨人,而在 dockerfile 中配置代理也是一个非常麻烦的事情,很多时候都是发现 docker build 执行缓慢或者失败的时候才想到要配置代理,浪费大把时间。 ...

April 17, 2026 · 3 min

如何在 Hugo 中使用 Typst 编写文章

前言 Typst 一直以来都是我非常喜欢的一个排版工具,相比于 LaTeX,Typst 的语法简单,编写体验好;相比于 Markdown,Typst 的功能强大,标准统一,符合我对排版工具的所有想象。 自从我接触到 Typst 之后,不仅我的日常的作业、报告、简历等文档都使用 Typst 写的,而且我也开发了一个 Typst Package 用于在 Typst 中绘制树状图,比如二叉树、红黑树、语法树等等 —— tdtr (i.e. tidy tree),感兴趣的话可以看看。 因此,我一直想在我的 Blog 中使用 Typst 来编写文章,但是苦于 Typst 对 HTML 导出的支持仍然处于实验性阶段,因此搭建 Blog 的想法也一直一拖再拖。 但是,直到最近,我对于搭建 Blog 的需求越来越迫切了,所以我就决定不再等待 Typst 对 HTML 导出的支持了,而是自己动手来实现这个功能。这篇文章讲述的就是我如何实现在 Hugo 中使用 Typst 编写文章的。 Blog 的源代码位于 github.com/Vertsineu/blog,欢迎 star 和 fork。 使用 如果你也想像我的 Blog 一样使用 Typst 来编写基于 Hugo 的 Blog 的话,可以按照以下步骤来操作: 首先安装我修改过的 Hugo,目前还没有发布版本,因此需要手动编译安装: 首先,clone 下来我修改过的 Hugo 的代码,并切换到 support-typst 分支,即: ...

March 29, 2026 · 7 min