Docker-组合多个服务监听同一个端口,不同域
Docker-compose multiple services listen on same port, different domains
如何让多个 docker 服务侦听相同的端口,只使用不同的域?
是否可以在 docker-compose
中定义,或者我是否只需要一个服务侦听端口,然后根据域将流量重新路由到相应的服务?
这个例子失败了,因为它在整个网络上侦听(而不仅仅是域)
docker-compose up
Creating network "test-docker_default" with the default driver
Creating test-docker_static_1 ... done
Creating test-docker_app_1 ...
Creating test-docker_app_1 ... error
ERROR: for test-docker_app_1 Cannot start service app: driver failed programming external connectivity on endpoint test-docker_app_1 (ef433ffad1af01ffa31cd8a69a8c15b69ca7e7b6935924d34891b92682570e68): Bind for 0.0.0.0:80 failed: port is already allocated
ERROR: for app Cannot start service app: driver failed programming external connectivity on endpoint test-docker_app_1 (ef433ffad1af01ffa31cd8a69a8c15b69ca7e7b6935924d34891b92682570e68): Bind for 0.0.0.0:80 failed: port is already allocated
docker-compose.yml
version: '3.3'
services:
app:
image: node
depends_on:
- static
networks:
default:
aliases:
- app.localhost
ports:
- 80:80
static:
image: nginx
networks:
default:
aliases:
- static.localhost
ports:
- 80:80
/etc/hosts
127.0.0.1 app.localhost
127.0.0.1 static.localhost
您只能将一个容器映射到主机的同一个端口。如果你想在同一个主机端口上映射 2 个服务,你应该使用像 Traefik 这样的反向代理(与 docker 很好地集成)。反向代理将侦听主机端口 80,然后转发到未映射到主机的端口上的特定 docker 容器,具体取决于一些已定义的规则,如别名、url 路径。
您应该使用反向代理。例如,您可以查看 dockerhub.io 上的 jwlider/nginx,文档非常好!
如何让多个 docker 服务侦听相同的端口,只使用不同的域?
是否可以在 docker-compose
中定义,或者我是否只需要一个服务侦听端口,然后根据域将流量重新路由到相应的服务?
这个例子失败了,因为它在整个网络上侦听(而不仅仅是域)
docker-compose up
Creating network "test-docker_default" with the default driver
Creating test-docker_static_1 ... done
Creating test-docker_app_1 ...
Creating test-docker_app_1 ... error
ERROR: for test-docker_app_1 Cannot start service app: driver failed programming external connectivity on endpoint test-docker_app_1 (ef433ffad1af01ffa31cd8a69a8c15b69ca7e7b6935924d34891b92682570e68): Bind for 0.0.0.0:80 failed: port is already allocated
ERROR: for app Cannot start service app: driver failed programming external connectivity on endpoint test-docker_app_1 (ef433ffad1af01ffa31cd8a69a8c15b69ca7e7b6935924d34891b92682570e68): Bind for 0.0.0.0:80 failed: port is already allocated
docker-compose.yml
version: '3.3'
services:
app:
image: node
depends_on:
- static
networks:
default:
aliases:
- app.localhost
ports:
- 80:80
static:
image: nginx
networks:
default:
aliases:
- static.localhost
ports:
- 80:80
/etc/hosts
127.0.0.1 app.localhost
127.0.0.1 static.localhost
您只能将一个容器映射到主机的同一个端口。如果你想在同一个主机端口上映射 2 个服务,你应该使用像 Traefik 这样的反向代理(与 docker 很好地集成)。反向代理将侦听主机端口 80,然后转发到未映射到主机的端口上的特定 docker 容器,具体取决于一些已定义的规则,如别名、url 路径。
您应该使用反向代理。例如,您可以查看 dockerhub.io 上的 jwlider/nginx,文档非常好!