docker nginx 負載均衡
阿新 • • 發佈:2020-12-29
本來這個配置很簡單,也就好像從來沒測試過。正好用 docker 來模擬多臺伺服器,於是開啟了三臺 nginx 容器,還測試了容器相互通過 Ping 內部 IP 172.17.0.X 能通,可是等配置好了,就是請求入口伺服器時,返回 No route to host。
百度查了下,說什麼防火牆,我都沒開。加上我是用的 WSL,與真實 Linux 系統還有點差異,所以就想通過別的方式。想過改為繫結宿主機埠,又還麻煩,不如把容器加入同一個網路,這樣相互之間可以通過容器名訪問,試試看行不行。
建立一個網路
docker network create network
啟動三個容器
dockerrun-d--networknetwork--namenginx-1nginx:latest dockerrun-d--networknetwork--namenginx-2nginx:latest dockerrun-d--networknetwork--namenginx-3nginx:latest 進入容器nginx-1,並安裝 vim 和 ping 命令 dockerexec-itnginx-1bash sed-i"s/deb.debian.org/mirrors.aliyun.com/g"/etc/apt/sources.list aptupdate aptinstall-yvimiputils-ping pingnginx-2 pingnginx-3 編輯容器nginx-1 中的 配置檔案,在http 塊中新增入下內容,順便把 http 塊最下邊 include 其他配置檔案刪掉 vim/etc/nginx/nginx.confhttp { upstream backend { server nginx-2; server nginx-3; } server { listen 80; location / { proxy_pass http://backend; } } }
儲存後重啟容器nginx-1
docker restart nginx-1 進入容器nginx-2 dockerexec-itnginx-2 bash echo 'ngxin 2 號伺服器' >/usr/share/nginx/html/index.html 進入容器nginx-3 dockerexec-itnginx-3 bash echo 'ngxin 3 號伺服器' >/usr/share/nginx/html/index.html 回到宿主機的命令,檢視nginx-1 的 ip 地址 docker container inspect nginx-1 例如是172.17.0.2,請求一下這個地址,返回內容會不會變,如果變的話,說明成功了。 curl 172.17.0.2 curl 172.17.0.2 curl 172.17.0.2 我用自己封裝的快捷命令走一遍。