你好,我目前正在计划使用Docker的一些服务器架构。 (我是Docker的新手)
我的目标是:
每个容器的工作方式:
现在我正在使用docker compose来同时运行前端和后端。
docker-compose.yml
version: '3'
services:
frontend:
build: ./frontend
ports:
- 8080:80
networks:
- app-network
backend:
build: ./backend
ports:
- 3000:3000
working_dir: /usr/src/server
command: node server.bundle.js
networks:
- app-network
networks:
app-network:
driver: bridge
这很好。我可以访问localhost:8080来访问网页,并可以访问localhost:3000来访问后端。
注意:前端容器使用NGINX docker映像,后端容器使用NODE:10 docker映像。
我想完成的事情
在我的服务器上,我将有另一个NGINX实例。我想以某种方式将每个docker-compose设置容器化到一个端口,例如localhost:5000。
这样,当我从www.example-website1.com收到请求时,它将重定向到localhost:5000,然后从该docker-compose设置加载localhost:8080。
再次从www.example-website2.com收到请求时,它重定向到localhost:5001,然后从另一个docker-compose设置加载localhost:8080。
这可能吗?还是有其他方法可以解决这个问题?
答案 0 :(得分:1)
您不能在两个不同的容器中使用相同的端口,必须始终公开一个不同的端口。
要配置ngnix,必须将其安装在主机上,然后转到文件夹:
/etc/ngnix/sites-enabled
然后使用ngnix将使用的规范创建一个.conf文件。 示例:
myapi.conf
server {
server_name mywebsite.com;
access_log /etc/nginx/mywebsite.log;
location / {
proxy_pass http://127.0.0.1:9003;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
在此示例中,通过网站mywebsite.com到达的所有流量都将定向到暴露了端口9003的容器。 希望我能帮到你
答案 1 :(得分:1)
在示例中,端口8080没什么特别的,您可以直接选择要用于单独的基于Compose的应用程序的主机端口。您必须为每个Compose设置选择不同的已发布端口,否则容器将根本无法启动。
如果您的设置是主机nginx联系“前端”容器,然后将一些请求转发到“后端”容器,那么您只需要选择前端所需的端口号即可,而无需不需要公开后端。
version: '3'
services:
frontend:
build: ./frontend
ports:
# Pick a different port "5000" for each setup
- 5000:80
backend:
build: ./backend
# Use default command:, working_dir: from image
# Could publish ports: if necessary
depends_on:
- frontend
# Use "default" Docker network
如果您确实需要从外部直接联系后端,则可以通过主机nginx代理以相同的方式公开后端,并从中发布ports:
,再次为每个容器堆栈选择不同的端口。
在两个容器之间,如果backend
需要调用frontend
,则它可以始终使用Docker Compose服务名称和容器内 的端口:{{1} }。您不需要http://frontend:80/
或expose:
即可工作。