在物理机和运行 Docker 的 ubuntu 虚拟机之间创建网络,托管一个容器“Stack”,其中包含两个 Web 应用程序和一个 Nginx 代理

在物理机和运行 Docker 的 ubuntu 虚拟机之间创建网络,托管一个容器“Stack”,其中包含两个 Web 应用程序和一个 Nginx 代理

我必须在将作为服务器的虚拟机中配置一个带有 ubutu 的 WM,它将运行一个包含两个 Web 应用程序和一个 nginx 代理的容器,直接从 Windows 环境访问,所有这些都通过 docker compose 实例化,这两个应用程序将在端口 9000 和 9001 上运行。

NGINX 服务器必须在端口 80 上运行,将客户端请求重定向到“/app01/status”和“/app02/status”路由中的应用程序端口。

我的问题出现如下,我无法在 Windows 客户端机器上创建对应用程序的访问权限,我找不到通过名称访问应用程序的方法,我只能使用 IP 192.168.1.2:9000 和 192.168.1.2:9001 我想进行域名访问:http://server-linux/app01/ 和 http://server-linux/app02/。

拓扑结构如下:

到目前为止一切顺利,我可以使用配置创建所有 docker-compose,并使应用程序在虚拟机中的相应端口上运行,在我的情况下是 192.168.1.2:9000 和 192.168.1.2:9001,在 Windows 上仅通过 ip 和端口访问。

我想要一个光来提高这个访问权限,并使 windows 机器的浏览器能够使用域 http://server-linux 加载两个应用程序,然后在放置 /app01 时加载应用程序 01,在放置 /app02 时加载应用程序 02

我的docker-compose是这样的(除了这两个应用程序之外,我还在端口5432上的postgres中添加了一个数据库)


version: '3'

services:

    app01:

       build: ./app01/.

        command: uvicorn main:app --host app01 --port 80
        ports:
            - 9000:80            
        networks:
            - webnotes_network
    app02:
        build:./app02/.
        env_file:
            - app02.env
        command: uvicorn API_Server:app --host app02 --port 80
        depends_on:
            - db
        ports:
            - 9001:80            
        networks:
            - webnotes_network
db:

   image:"postgres:13-alpine"
    
 restart: always

        env_file:
            - db.env
        volumes:
            - ./db_data/:/var/lib/postgresql/data/
        ports:      
            - '5432:80'
        networks:
            - webnotes_network
    server:
        build: ./server/.
        volumes:
            - ./server/html_files/:/usr/share/nginx/html
        ports:      
            - '9004:80'
        depends_on:
            - db
            - app02
        networks:
            - webnotes_network


networks:
    webnotes_network:
       driver: bridge

答案1

我找不到通过名称访问应用程序的方法。

诸如此类的名称server-linux需要相关的机器知道该名称server-linux指向 IP 192.168.1.2

如果只有主机需要知道这个名称,那么在 Windows 上,实现此目的的最简单方法就是编辑 Windowshosts文件。

否则,如果您网络上除主机以外的设备需要映射server-linux192.168.1.2,则应设置本地 DNS 服务器,例如 BIND。BIND 过去曾有原生 Windows 软件,但显然已转向仅在最新版本中支持 Linux。然而,他们确实有一个官方 Docker 镜像你可能感兴趣。

请注意,以所述方式在本地使用 BIND 可能需要您的路由器使用本地 DNS 服务器进行所有 DNS 解析,包括“正常”互联网浏览。可以配置 BIND 来解析本地名称 ( server-linux) 并将未知名称 ( google.com) 上行传递到您的常规 ISP DNS 服务器或您通常使用的任何服务器。

NGINX 服务器必须在端口 80 上运行,将客户端请求重定向到/app01/status/app02/status路由中的应用程序端口。

这被称为反向代理。您需要将所有传入的 HTTP 请求(主机上的端口 80)指向 NGINX。您可能需要一个服务器块配置http://server-linux两个路径(/app01/app02),每个路径都重定向到您的正确 IP 和端口组合。请注意,转发此类请求可能需要在 NGINX 中进行一些额外配置,以将所有必要的数据传递给您的应用程序,以使它们正常工作。此外,/app01/app02假设这status是由 Docker 应用程序自己生成的页面。

相关内容