非 Docker 主机应用程序上的 Docker Nginx

问题描述

我有许多 docker 容器通过 docker Nginx 组合(docker-compose.yml 概述如下),它们运行良好。我希望 docker Nginx 对在 localhost:8080 上运行的非 docker 应用程序执行相同的操作,也就是说,我希望 docker Nginx 容器运行与 example.com 的连接到 127.0.0.1:8080,其中 127.0.0.1:8080 由运行一个非 docker 应用程序(代码服务器确实是特定的,但这应该无关紧要)

version: '3'

services:

  Nginx-proxy:
    image: jwilder/Nginx-proxy
    container_name: Nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /apps/proxy/conf:/etc/Nginx/conf.d
      - /apps/proxy/vhost:/etc/Nginx/vhost.d
      - /apps/proxy/html:/usr/share/Nginx/html
      - /apps/proxy/dhparam:/etc/Nginx/dhparam
      - /apps/proxy/certs:/etc/Nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: always

  letsencrypt:
    image: jrcs/letsencrypt-Nginx-proxy-companion
    container_name: Nginx-proxy-le
    depends_on:
      - Nginx-proxy
    volumes:
      - /apps/proxy/vhost:/etc/Nginx/vhost.d
      - /apps/proxy/html:/usr/share/Nginx/html
      - /apps/proxy/dhparam:/etc/Nginx/dhparam:ro
      - /apps/proxy/certs:/etc/Nginx/certs
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - Nginx_PROXY_CONTAINER=Nginx-proxy
    restart: always

networks:
  default:
    external:
      name: Nginx-proxy

并且它在 docker 容器上运行良好,当我包含“Nginx-proxy”以便它可以检测它们时,很棒的工具。我不能简单地将这样的内容粘贴到 default.conf(Nginx 的 conf)中

server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    location / {
      proxy_pass http://localhost:8080/;
      proxy_set_header Host $host;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection upgrade;
      proxy_set_header Accept-Encoding gzip;
    }
}

我的猜测是,对我来说,“本地主机”不是 Nginx 的“本地主机”,因为它位于 docker 内(我是这个 docker 的新手,所以我可能在胡说八道)。我看到 issue 他们提到了许多方法,但没有一个我有用。特别是我尝试按照 CWempe 建议

运行一个虚拟 docker
docker run -d \
    -e VIRTUAL_HOST=foo.bar.com \
    -e VIRTUAL_PORT=8080 \
    -e UPSTREAM_NAME=webserver.local \
    --rm \
    cwempe/docker-dummy:latest

这不起作用,Nginx 甚至没有检测到它,这让我认为它可能是因为它不在 Nginx 网络上,所以我添加了它(为了方便起见,将它变成了 docker-compose)

version: '3.3'
services:
    docker-dummy:
        environment:
            - VIRTUAL_HOST=example.com
            - VIRTUAL_PORT=8080
            - UPSTREAM_NAME=127.0.0.1
        image: 'cwempe/docker-dummy:latest'

networks:
  default:
    external:
      name: Nginx-proxy

然后查看 default.conf 我得到

# mydomain.com
upstream mydomain.com {
                                ## Can be connected with "Nginx-proxy" network
                # code-server_docker-dummy_1
                        server 172.25.0.7 down;
}
server {
        server_name mydomain.com;
        listen 80 ;
        access_log /var/log/Nginx/access.log vhost;
        include /etc/Nginx/vhost.d/default;
        location / {
                proxy_pass http://example.com;
        }
}
server {
        server_name example.com;
        listen 443 ssl http2 ;
        access_log /var/log/Nginx/access.log vhost;
        return 500;
        ssl_certificate /etc/Nginx/certs/default.crt;
        ssl_certificate_key /etc/Nginx/certs/default.key;
}

所以肯定它已经看到了,但它也认为它已关闭并且根本不包含 VIRTUAL_PORT 并且显然 127.25.0.7 IP 对我来说也没有意义。更改 127.25.0.7 -> 127.0.0.1:8080 没有任何作用。知道如何解决这个问题吗?感谢您提前提供意见。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)