502 通过 Jwilder 的 Nginx 代理访问虚拟主机时网关错误



我有一个Nginx代理(Jwilder,默认配置)和Gitlab实例在同一台主机上运行。git.myhost.com指向主机IP。当用下面的docker-compose.yml启动Gitlab时,我在访问时得到一个502 Bad Gatewayhttp://git.myhost.com.

nginx代理容器中生成的/etc/nginx/conf.d/default.conf看起来也很好:

upstream git.myhost.com {
                # 2ab9168d-c69e-4725-8c20-31a194ad8d07
                server 172.17.0.13 vhost;
}
server {
        server_name git.myhost.com;
        listen 80 ;
        access_log /var/log/nginx/access.log vhost;
        location / {
                proxy_pass http://git.myhost.com;
        }
}

我做错了什么

这是Gitlab的docker-compose.yml:

gitlab-server:
  hostname: git.myhost.com
  expose:
  - "8100"
  ports:
  - 8101:22/tcp
#  - 8100:8100/tcp
  labels:
    io.rancher.sidekicks: gitlab-data
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://git.myhost.com'
      gitlab_rails['gitlab_shell_ssh_port'] = 8101
    VIRTUAL_HOST: git.myhost.com
    VIRTUAL_PORT: 8100
  image: gitlab/gitlab-ce:latest
  volumes_from:
  - gitlab-data
gitlab-data:
  labels:
    io.rancher.container.start_once: 'true'
  entrypoint:
  - /bin/true
  hostname: gitdata
  image: gitlab/gitlab-ce:latest
  volumes:
  - /etc/gitlab:/etc/gitlab
  - /var/log/gitlab:/var/log/gitlab
  - /var/opt/gitlab:/var/opt/gitlab

您应该更改nginx如下:

upstream gitlab {
                # 2ab9168d-c69e-4725-8c20-31a194ad8d07
                server 172.17.0.13:8100;
}
server {
        server_name git.myhost.com;
        listen 80 ;
        access_log /var/log/nginx/access.log vhost;
        location / {
                proxy_pass http://gitlab;
        }
}

172.17.0.13是gitlab docker容器的ip地址。

可能导致此问题的常见问题之一是在nginx-proxy网络之外运行容器,而nginx-proxy最终无法访问该容器。

为了在与nginx-proxy相同的网络中运行它,首先,您需要了解nginx-proxy在哪个网络中运行。只需运行以下命令即可找到:

docker network ls -f driver=bridge --format "{{.ID}}" | xargs docker network inspect | grep Name

它应该给你这样的东西:

    "Name": "bridge",
            "Name": "influxdb",
            "Name": "mariadb",
    "Name": "http_proxy",
            "Name": "web-app",
            "Name": "proxy",
            "Name": "grafana",

现在我可以看到名称为proxy的容器位于名为http_proxy的网络下。我所要做的就是通过添加标志--network http_proxy(用你的网络名称替换http_proxy)在这个网络中运行新容器:

docker run -d --name test --network http_proxy -h test.local -e VIRTUAL_HOST=test.local -v "$PWD":/usr/share/nginx/html nginx

希望这能有所帮助。祝你好运

最新更新