我有一个典型的Web堆栈,其中包含nginx
+ django
+ database
个组件。
我已使用docker-compose
将它们设置在不同的docker容器中,并且运行良好。
services:
billing_app_dev:
image: jameslin/billing_app:latest
expose:
- 8000
billing_postgres:
image: postgres:10.5
restart: always
volumes:
- pg_data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
billing_nginx:
image: jameslin/billing_nginx:${TAG}
volumes:
- app_files:/static
links:
- 'billing_app'
ports:
- 80:80
现在,我想知道如何在单台计算机上设置DEV
和QA
环境。我可以更改django
和database
容器以侦听不同的端口,但是由于端口80只能被一个容器侦听,因此我似乎无法单独运行nginx
容器。
对于这两个不太干净的环境,我将不得不共享nginx
容器。
如果无法运行2个虚拟机,还有更好的主意吗?
答案 0 :(得分:0)
我有3个apache容器和1个nginx在同一台服务器上运行,因此可以肯定这不是问题。
对于Web服务器+数据库的每个堆栈,我都有一个不同的docker-compose文件,这样docker将为每个堆栈创建一个不同的网络,从而避免了并发端口的可能问题,而您只需要将nginx绑定到其他文件中服务器的端口,因为您只能将一项服务绑定到一个端口。而且,每个容器都是一个单独的“机器”,因此即使在同一网络上,它们也可以使用相同的端口。
如果您真的需要在服务器的端口80和443中运行所有服务,则可能需要将运行在这些端口中的nginx放置在内部docker网络中的反向代理中,这些服务是一种选择但是我从来没有通过docker内部网络尝试过它。
答案 1 :(得分:0)
我认为您需要的是configs.jsx
或可能称为virtual ip
。即使您只有一张网卡,仍然可以在其上设置2 ips。
然后,您可以在主机上设置2个不同的nginx容器,并使用不同的ip但使用相同的80端口。
类似如下:
ip aliasing
详细信息指的是Create Multiple IP Addresses to One Single Network Interface
对于cd /etc/sysconfig/network-script/
cp ifcfg-eth0 ifcfg-eth0:1
vi ifcfg-eth0:1
# Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)
DEVICE=eth0:1 ----> sub network card
HWADDR=00:0C:29:45:62:3B
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.109.108 ----> configure a new different ip
NETMASK=255.255.255.0
,从nginx guide,您必须更改nginx泊坞窗才能将nginx
修改为listen 80
,然后它就不会侦听所有ip地址。