非 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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...