我有一個構建兩個基本應用程式的 docker-compose 檔案。一個帶角度的前端和一個帶阿多尼斯的后端。
version: "3.9"
services:
backend_login:
build:
context: ./apis/apis/login_api
ports:
- "3333:3333"
sendit_frontend:
build:
context: ./frontend/frontend/external
ports:
- "4500:4200"
depends_on:
- api_backend_login
當我運行 docker-compose up 時,兩個應用程式啟動,它們在各自的埠中作業。當我使用服務名稱(在本例中為 backend_login)從前端應用程式呼叫 api 時,問題就出現了。
我將終端連接到兩個容器并在它們之間進行了 telnet 測驗,它們似乎可以作業,因為 y 決議名稱并連接到各自的端??口
最后,我發現前端應用程式在從 Firefox 呼叫時,會嘗試使用主機 dns 而不是內部 docker dns 來決議名稱。
現在我不知道問題出在哪里,是在代碼中還是在我構建容器的方式中。
編輯:我意識到該應用程式正在我的主機的瀏覽器中運行(我是一個使用容器的新手),顯然它使用我的主機 DNS。
有沒有辦法解決這個問題?
uj5u.com熱心網友回復:
docker compose 為 compose 檔案中的所有服務設定了一個 docker 網路,允許它檢測您正在談論的 DNS 規則,但僅限于從服務到服務。正如您所指出的,您的 Angular 應用程式在技術上是從瀏覽器(例如 Firefox)“運行”的,這意味著它不在網路內部。
從容器環境中運行 SPA 或靜態站點(如 Angular)沒有實用的方法,但解決問題的簡單方法是將前端指向http://localhost:3333. 您已將埠映射到主機,因此它應該可以直接從主機網路獲得。
注意:當你到達那里時,這對 prod 來說也是個問題。當涉及到動態后端地址時,SPA 和靜態站點可能會很棘手。大多數 SPA 框架建議您在每次部署到新環境時重新構建應用程式,以便可以將后端地址構建到工件中,但這往往與以容器為中心的開發相矛盾,后者往往會保持理念“一次構建,隨處部署”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/476084.html
標籤:angularjs 码头工人 码头工人撰写 dns 阿多尼斯.js
