我是 docker 網路和 nginx 的新手,但嘗試在本地開發服務器上“dockerize”所有內容。用于使用 nginx 測驗 docker 影像,該影像應該將另一個容器(gogs)從埠 3000 重定向到埠 80 的特定 url。我希望反向代理配置和 docker 影像“分離”,對于每個“應用程式”都有自己的docker-compose 檔案。
所以我應該通過http://app.test.local 訪問 gog安裝。但是:我使用http://app.test.local只有一個壞的 nginx 網關,使用http://app.test.local:3000我到達了 gog 安裝......
我嘗試了很多教程,但有些地方必須有錯誤,每次都會出錯
所以我做了什么:
$ docker network create testserver-network
為 nginx 創建了 docker-compose:
version: '3'
services:
proxy:
container_name: proxy
hostname: proxy
image: nginx
ports:
- 80:80
- 443:443
volumes:
- /docker/proxy/config:/etc/nginx
- /docker/proxy/certs:/etc/ssl/private
networks:
- testserver-network
networks:
testserver-network:
一個是gogs:
version: '3'
services:
gogs:
container_name: gogs
hostname: gogs
image: gogs/gogs
ports:
- 3000:3000
- "10022:22"
volumes:
- /docker/gogs/data:/var/gogs/data
networks:
- testserver-network
networks:
testserver-network:
(映射目錄作業)
configured default.conf of nginx:
# upstream gogs {
# server 0.0.0.0:10880;
# }
server {
listen 80;
server_name app.test.local;
location / {
proxy_pass http://localhost:3000;
}
}
and added to hosts file on client
app.test.local <server ip>
docker exec proxy nginx -t and docker exec proxy nginx -s reload say everythings fine...
uj5u.com熱心網友回復:
回答
您應該將兩個容器連接到同一個 docker 網路,然后代理到 http://gogs:3000。您也不應該需要在本地主機上公開埠 3000,除非您希望http://app.test.local:3000作業。我認為理想情況下您應該洗掉它,因此http://app.test.local應該代理到您的 gogs 服務器,而http://app.test.local:3000應該會出錯。
解釋
gogs 在其容器內的埠 3000 上公開,然后在主機上的埠 3000 上進一步公開。nginx 容器無法訪問您主機上的埠 3000,因此當它嘗試代理到 http://localhost:3000 時,它正在代理到 nginx 容器內的埠 3000(它不托管任何內容)。
將容器加入同一網路后,您應該能夠通過主機名(您已設定為 gogs)從 nginx 容器參考 gogs 容器。現在 nginx 將通過 docker 網路進行代理。因此,您應該能夠執行代理,而無需在本地計算機上公開 3000。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/360694.html
