我遇到了一个非常具体的情况,虽然还有其他方法可以做到这一点,但我有点着迷于此,并想找到一种完全像这样的方法:
假设我有一台服务器运行多个服务,这些服务隐藏在隔离的 docker 容器中。由于大多数这些服务都是 http,我使用 nginx 代理向每个服务公开特定的子域。例如,节点服务器运行在 docker 容器上,其端口80
绑定到127.0.0.1:8000
主机上。我将在 nginx 中创建一个虚拟主机,将所有请求代理myapp.mydomain.com
到http://127.0.0.1:8000
. 这样,docker 容器不能从外部访问,除了通过myapp.mydomain.com
.
现在我想以指向 gogs容器的方式启动一个gogsgogs.mydomain.com
docker 容器。所以我启动了这个 gogs 容器,端口8000
绑定到127.0.0.1:8001
主机上。和一个 nginx 站点代理请求gogs.mydomain.com
到http://127.0.0.1:8001
并且它运行良好......
但是,gogs 是一个 git 容器,我也想像通过那样访问存储库,git@gogs.mydomain.com:org/repo
但这不适用于当前设置。使这项工作的一种方法22
是将容器的端口绑定到0.0.0.0:8022
主机上的端口,然后 git ssh url 可以是类似git@gogs.mydomain.com:8022/repo
.
(这似乎不工作;当我推到与URI这样的原点,混帐要求密码对git
上gogs.mydomain.com
-而不是gogs.mydomain.com:8022
-但不过这可能是什么我做错了,超出范围的这个问题,我也很感激任何诊断)
我主要担心的是,我希望<gogs container>:22
代理ssh 端口,就像我使用 nginx 代理 http 端口一样;即任何gogs.mydomain.com …