Apache 将代理docker容器反转为另外两个docker容器,如何在一台计算机上拥有多个实例
在这个项目中,我有一个apache docker容器(称为loadbalancer),它指向两个apache docker容器中的任何一个。如果路径为“/support*”,则它将转到支持容器,否则它将转到webapp。目前为了实现这一点,我已经硬编码了我的docker compose networks子网和每个容器的ipv4地址。然后一个apacheconf文件只指向那些硬编码的ip。这对于本地开发环境非常有效 但是,它不适用于需要承载多个项目实例的临时服务器。由于硬编码的子网/ipv4地址,我无法启动此docker compose网络的多个实例。如何在不硬编码子网的情况下实现此负载平衡器设置,以便拥有多个实例。或者,是否有更好的解决方案来实现在单个服务器上托管多个副本的预期效果,例如apache容器中的多个vhost。你有什么建议?因为我不知道这里的最佳实践是什么 loadbalancer.confApache 将代理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地址,
<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。您应该进行两项更改:
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