大佬教程收集整理的这篇文章主要介绍了在一个子域上托管多个 Docker 网络服务,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经在网上搜索了好几个小时,但还没有找到满意的答案。我会尽量清楚地解释我的需求。
我有一个运行带有多个容器的 docker 环境(Photon OS)的虚拟机。目的是建立一种内联网。我希望将所有内容(至少是有意义的内容)放在一个子域中,因为这样“客户”更容易理解和导航。
我知道如何使用 Nginx 使容器在多个子域下可用。我目前正在为此使用带有 Nginx-proxy-manager 的容器。到目前为止效果很好,但是对于每项服务,我都必须注册另一个 Cname。这意味着我无法真正将某些服务整合在一起。我举个例子:
假设我有一个像 Nextcloud 这样的容器,它依赖于一个数据库容器 (postgresql)。为了访问数据库,我需要 adminer 作为第三个容器。 在我目前的情况下,我必须为 Nextcloud 和数据库前端注册至少两个 Cname:
nextcloud.example.com
dbadmin.example.com
让我们进一步假设我想要一个额外的 DokuWiki 容器(我知道我可以将它托管在一个普通的网络服务器上),它需要另一个 db 和另一个 db-frontend。我将不得不再注册两个 Cname:
wiki.example.com
dbadmin.example.com
...等等。怎么办? dbadmin-2.example.com
? wiki-db.example.com
?
现在我决定为我的用户添加一个 Bitwarden 实例并且必须注册
pass.example.com
我想访问整个结构而不是所有这些子域/Cname,如下所示:
intranet.example.com/cloud/main
服务 Nextcloudintranet.example.com/cloud/dbadmin
为 Nextcloud 的 adminer 实例提供服务intranet.example.com/wiki/main
服务于 DokuWikiintranet.example.com/wiki/dbadmin
为 DokuWiki 的 adminer 实例提供服务intranet.example.com/passwords
为 Bitwarden 实例提供服务我不打算覆盖成千上万的用户。总共可能不超过50个,更不用说同时进行了。所以负载平衡的优势并不是我真正需要的。
那么现在我的主要问题是:我如何f实现这一目标?
我尝试将 Nginx 配置为在不同位置提供不同的服务。我遵循的任何教程基本上都是这样做的:
location /cloud/main {
proxy_pass http://172.18.0.1:<nextcloud-port>;
}
location /cloud/dbadmin {
proxy_pass http://172.18.0.1:<adminer-nxt-port>;
}
location /wiki/main {
proxy_pass http://172.18.0.1:<dokuwiki-port>;
}
location /wiki/dbadmin {
proxy_pass http://172.18.0.1:<adminer-wiki-port>;
}
location /passwords {
proxy_pass http://172.18.0.1:<bitwarden-port>;
}
这甚至可以有点。如果我访问 intranet.example.com
URL 之一,请求将转发到正确的容器。但响应并未根据服务所在的位置进行调整。
如果我访问 intranet.example.com/cloud/main
,Nextcloud 实例会在其根目录上获取请求并尝试将我重定向到 <root>/#/login
。这显然只在 nextcloud 在域的根上运行时才有效,但事实并非如此。
我希望 Nginx(或任何其他合适的反向代理)来执行此操作:
intranet.example.com/cloud/main/
intranet.example.com
上侦听端口 80 并接收请求 /cloud/main/
/cloud/main
上的流量转到 Nextcloud 并将请求 /
定向到 http://172.18.0.1:<nextcloud-port>
/#/login/
/cloud/main/#/login/
/cloud/main/#/login/
intranet.example.com/cloud/main/#/login/
/cloud/main/#/login/
/cloud/main
上的流量转到 Nextcloud 并将请求 /#/login/
定向到 http://172.18.0.1:<nextcloud-port>
/cloud/main
添加到 URL 和 HTML 的内容中,以便所有链接都指向正确的位置。intranet.example.com/cloud/main/#/login/
上收到登录页面,状态完全正常。有没有可能让 Nginx、traefik 或其他任何东西做到这一点?也许这只是我缺少的简单重写行?也许这是 Nginx-proxy-manager 的问题,这应该正常工作?感谢任何帮助,但请不要不要建议做一些完全不同的事情,除非它实现了相同的用户体验。
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的在一个子域上托管多个 Docker 网络服务全部内容,希望文章能够帮你解决在一个子域上托管多个 Docker 网络服务所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。