【问题标题】:Not dockerized nginx load balancing to gitlab dockerized没有 dockerized nginx 负载均衡到 gitlab dockerized
【发布时间】:2026-02-12 14:55:01
【问题描述】:

我已经在安装了 nginx 的服务器上安装了 iRedMail。 我已经在 docker 容器中安装了 docker 然后 gitlab。

是否可以从 docker 外部的 nginx 到 gitlab 到 docker 容器中进行负载平衡?我不知道IP也不知道端口。

我还需要将 MariaDB 本地容器与 Gitlab docker 容器一起使用。

【问题讨论】:

  • 您可以通过运行docker inspect --format '{{ .NetworkSettings.IPAddress }}' <Container ID>从主机获取容器的IP地址。
  • 不是一个好的解决方案,这意味着每次重启我都需要更新 nginx.conf

标签: nginx docker mariadb


【解决方案1】:

是否可以从docker外的nginx到gitlab到docker容器中进行负载均衡?

您可以使用docker-gen自动更新nginx.conf

首先,通过关注doc在您的主机上安装docker-gen

然后,您应该制作一个docker-gen 模板来生成您的nginx 配置文件。

假设你的 gitlab 容器名为 gitlab,我们将它绑定到域 gitlab.domain.com,那么我们就有了这个模板

{{ range $name, $containers := groupBy $ "Name" }}
{{ $target_name := "gitlab"}}
{{ if $name==$target_name}}
upstream {{ $name }} {

{{ range $index, $value := $containers }}
    {{ with $address := index $value.Addresses 0 }}
    server {{ $address.IP }}:{{ $address.Port }};
    {{ end }}
{{ end }}

}
{{ end }}

server {
    listen 80;
    server_name gitlab.domain.com;

    location / {
        proxy_pass http://{{ $name }};
        include /etc/nginx/proxy_params;
    }
}
{{ end }}

最后,我们运行docker-gen自动生成目标nginx配置文件

docker-gen -watch -only-exposed -notify "nginx -s reload" nginx.tmpl /etc/nginx/sites-enabled/gitlab.conf


我还需要将 MariaDB 本地容器与 Gitlab docker 容器一起使用。

您可以将主机 ip 暴露给您的 docker 容器的主机文件,这是一个 answer 来执行此操作。

【讨论】: