[英]Running Multiple Docker Containers on a Single Linux Webserver Server
您好,我目前正在規划一些帶有 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。
這可能嗎? 還是有另一種方法我應該解決這個問題?
您不能在兩個不同的容器中使用相同的端口,您總是必須公開不同的端口。
要配置 ngnix,您必須將其安裝在主機上,然后將 go 安裝到文件夾:
/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 的容器。 我希望我幫助了你
在您的示例中,端口 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 組合服務名和容器內的端口: http://frontend:80/
。 您不需要expose:
或ports:
就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.