我目前有许多运行 docker 容器的小型 VM。虚拟机很小,因为它们太多,因此经常锁定,通常是在调用 S3 命令行工具时,但今天在尝试使用 wget 下载 DEB 文件时。
我这样做的原因是当时 docker 似乎是个好主意,每个迷你服务都有不同的主机名,但我想使用标准端口 (80/443),这样用户就不必记住自定义 URL , 只有主机名。
我受够了这些虚拟机的所有问题。我想转移到一个运行多个 docker 容器的强大服务器。但是,由于每个容器都使用端口 80 和端口 443,因此会出现端口冲突。
我不希望使用重定向,例如https://ldap.intranet.local被重定向到https://ldap.intranet.local:3000因为这会修改用户在浏览器中看到的 URL,我更喜欢这个100% 透明。
我目前的解决方案,我对其他人开放,是使用 Apache 通过主机名识别请求的能力,将请求转发到不同的端口。
即,如果请求进入https://ldap.intranet.local,Apache 会将其转发到https://127.0.0.1:3000,然后运行 LDAP docker 容器,使外部端口 3000 映射到内部端口 443 . docker 容器内的 web 服务器然后会拾取它并处理它。
同样,当请求进入https://jenkins.intranet.local时,Apache 会将其转发到https://127.0.0.1:4000,并且 Jenkins docker 容器将运行使得外部端口 4000 映射到内部端口 443 . docker 容器内的 web 服务器然后会拾取它并处理它。
等等等等。
这可能吗?如果是这样,我该如何配置 Apache 来做到这一点?如果不是,我还能如何解决我的问题?
非常感谢您的帮助。
正如@Gerald 所说,您正在寻找反向代理。
您可以查看本教程以使用 Docker 设置 Web 服务器场。
您还可以使用运行 Ubuntu Server 的简单 Docker 容器并将 nginx 安装为反向代理(这就是我所做的)。