簡體   English   中英

使用 nodejs app 和 anguar 在 docker 容器中運行時不連接到本地主機

[英]Doesn't connect to localhost when running within a docker container using nodejs app & anguar

我正在將 Nodejs 與angular 應用程序一起使用。 我將 angular 部署到我的 docker 桌面。 它正在運行,但是當我想使用 PC 瀏覽器中的 localhost 從我的 PC 訪問時,它沒有連接..

這是正在運行的 docker 映像

在此處輸入圖像描述

這是 Dockerfile 代碼

    FROM node:16.13.1 as build
    WORKDIR /app
    COPY package.json /app
    COPY . .
    RUN npm install
    RUN npm run build --prod
    RUN ls -la dist
    FROM nginx:alpine
    COPY --from=build /app/dist /usr/share/nginx/html
    EXPOSE 4200

當我想從我的電腦使用http://localhost:4200/訪問時,它沒有連接。 請幫忙找出問題..

EXPOSE只是解決方案的一部分。 您還需要在創建容器時發布端口。 您尚未提供有關如何啟動容器的詳細信息,但在您的情況下,正確的方法是:

docker run -d -P your_image_name

-P標志發布所有公開的端口。

另一種方式 - 顯式發布特定端口:

docker run -d --publish 4200:4200 your_image_name

Docker 文檔中閱讀更多信息

nginx:alpine在端口 80 上暴露。
運行npm startng serve時,端口 4200 用於開發。

EXPOSE 4200 什么都不做,在這種情況下具有誤導性。 您使用 EXPOSE 記錄圖像偵聽的端口。 正如 Antoine 所說, nginx 監聽端口 80,所以如果你想要一個 EXPOSE 語句,它應該是EXPOSE 80

刪除 EXPOSE 語句,因為它具有誤導性

FROM node:16.13.1 as build
WORKDIR /app
COPY package.json /app
COPY . .
RUN npm install
RUN npm run build --prod
RUN ls -la dist
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html

當您運行容器時,您可以像這樣將容器中的 map 端口 80 連接到機器上的端口 4200

docker run -d -p 4200:80 my_image_name

然后,您可以通過轉到 http://localhost:4200/ 來加載您的應用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM