Apache 将代理docker容器反转为另外两个docker容器,如何在一台计算机上拥有多个实例

Apache 将代理docker容器反转为另外两个docker容器,如何在一台计算机上拥有多个实例,apache,docker,docker-compose,reverse-proxy,Apache,Docker,Docker Compose,Reverse Proxy,在这个项目中,我有一个apache docker容器(称为loadbalancer),它指向两个apache docker容器中的任何一个。如果路径为“/support*”,则它将转到支持容器,否则它将转到webapp。目前为了实现这一点,我已经硬编码了我的docker compose networks子网和每个容器的ipv4地址。然后一个apacheconf文件只指向那些硬编码的ip。这对于本地开发环境非常有效 但是,它不适用于需要承载多个项目实例的临时服务器。由于硬编码的子网/ipv4地址,

在这个项目中,我有一个apache docker容器(称为loadbalancer),它指向两个apache docker容器中的任何一个。如果路径为“/support*”,则它将转到支持容器,否则它将转到webapp。目前为了实现这一点,我已经硬编码了我的docker compose networks子网和每个容器的ipv4地址。然后一个apacheconf文件只指向那些硬编码的ip。这对于本地开发环境非常有效

但是,它不适用于需要承载多个项目实例的临时服务器。由于硬编码的子网/ipv4地址,我无法启动此docker compose网络的多个实例。如何在不硬编码子网的情况下实现此负载平衡器设置,以便拥有多个实例。或者,是否有更好的解决方案来实现在单个服务器上托管多个副本的预期效果,例如apache容器中的多个vhost。你有什么建议?因为我不知道这里的最佳实践是什么

loadbalancer.conf

<VirtualHost *:80>
    TimeOut -1

    ProxyPass "/support" "http://172.20.0.5/support"
    ProxyPassReverse "/support" "http://172.20.0.5/support"
    ProxyPass "/" "http://172.20.0.2/"
    ProxyPassReverse "/" "http://172.20.0.2/"

    ProxyPreserveHost On
    TimeOut -1
</VirtualHost>
Docker提供了将容器名称解析为主机名和Docker Compose。您应该进行两项更改:

  • 在Apache配置中,在
    docker compose.yml
    http://support/support
    ,例如
  • 删除
    docker compose.yml
    中的所有
    网络:
    容器名称:
    设置,因为它们是冗余的,并且限制了文件的重用。(Docker将为您分配IP地址,Docker Compose将选择容器名称,但这些默认值没有问题。)

  • (此表单中的许多问题也使用过时的
    链接:
    功能;删除所有
    链接:
    块也是安全的。)

    一些参数如何?这是针对常规docker容器的,我不确定您是否可以让args自己修改yml文件。谢谢,稍后我将对此进行一些测试。不知道为什么我没有早点想到这一点,考虑到我使用数据库连接详细信息回答了我最初的问题,因此我将其标记为已接受,但是由于我使用了额外的主机:由于我无法成功地将ip使用改为“loadbalancer”,所以一直没有成功为外部链接更换了额外的_主机,出于某种原因,它也可以正常工作。希望这对别人有帮助
    version: '3.7'
    
    networks:
      pi-net:
        ipam:
          config:
          - subnet: 172.20.0.0/24
    
    services:
        cli:
            container_name: cli
            build: ./docker/cli
            networks:
              pi-net:
                ipv4_address: 172.20.0.3
            volumes:
            - type: bind
              source: .
              target: /srv/www
            - type: bind
              source: $HOME/.gitconfig
              target: /home/developer/.gitconfig
            extra_hosts:
            - "pi.docker:172.20.0.2"
            user: developer
            stdin_open: true
            tty: true
            environment:
              GIT_PAGER: cat
    
        webapp:
            container_name: webapp
            build:
              context: ./docker/web-server
              args:
                - vhostsFileName=webapp.conf
            networks:
              pi-net:
                ipv4_address: 172.20.0.2
            ports:
            - 80
            volumes:
            - type: bind
              source: .
              target: /srv/www
            # depends on cli because cli entrypoint.sh is creating var/ files needed by httpd
            depends_on:
              - "cli"
    
        support:
            container_name: support
            build:
              context: ./docker/web-server
              args:
                - vhostsFileName=support.conf
            networks:
              pi-net:
                ipv4_address: 172.20.0.5
            ports:
              - 80
            volumes:
              - type: bind
                source: .
                target: /srv/www
            # depends on cli because cli entrypoint.sh is creating var/ files needed by httpd
            depends_on:
              - "cli"
    
        loadbalancer:
            container_name: loadbalancer
            build:
              context: ./docker/web-server
              args:
                - vhostsFileName=loadbalancer.conf
            networks:
              pi-net:
                ipv4_address: 172.20.0.6
            ports:
              - 80:80
    
        db:
            container_name: db
            build: ./docker/mysql
            networks:
              pi-net:
                ipv4_address: 172.20.0.4
            ports:
            - 3306:3306
            volumes:
            - db:/var/lib/mysql
            environment:
                MYSQL_ROOT_PASSWORD: root
                MYSQL_DATABASE: pi
                MYSQL_USER: root
                MYSQL_PASSWORD: root
            restart: always
    
    volumes:
        db:
            driver: local