我有一個已 dockerized 的 React.js 應用程式,它一直作業正常,直到昨天出現某種錯誤,我發現這是由于節點版本 17 引起的,因此我決定將 docker 映像的節點版本恢復到 16。一切都很好,但是由于我這樣做了,我無法讓 docker 映像在指定的埠上運行。
這是我的 dockerfile:
ROM node:16.10-alpine as build
RUN mkdir /app
WORKDIR /app
COPY /front-end/dashboard/package.json /app
RUN npm install
COPY ./front-end/dashboard /app
RUN npm run build
# Install `serve` to run the application.
RUN npm install -g serve
# Set the command to start the node server.
CMD serve -s -n build
# Tell Docker about the port we'll run on.
EXPOSE 5000
如您所見,我正在構建一個版本,然后在埠 5000 上提供服務,但由于某種原因,它不再作業,并且過去作業正常。
我在 docker 中可以看到的輸出是:
服務!│
│ │
│ - 本地:http://localhost:3000 │
│ - 在你的網路上:http : //172.17.0.2 : 3000
當我轉到 localhost:3000 時,什么也沒有發生,這很好,但它應該在埠 5000 上作業,并且不會在那里運行。知道為什么我不能像以前那樣在埠 5000 上運行 docker 鏡像的構建嗎?
我使用 docker run -p 5000:5000 在埠 5000 上運行它,但這并不能解決問題。
uj5u.com熱心網友回復:
從日志中您可以看到您的應用程式可能正在偵聽 localhost:3000 上的流量。你的EXPOSE 5000線路不會改變這種行為,但讓 Docker(和其他用戶)認為埠 5000 很重要。由于埠 3000 上沒有任何內容正在偵聽,因此您應該會收到“連接被拒絕”的訊息。您可能需要查找https://docs.docker.com/engine/reference/builder/#expose
要擺脫這種情況:
確保您的 dockerized 行程正在偵聽 0.0.0.0:5000。您必須添加
-l tcp://0.0.0.0:5000到您的 CMD 行(請參閱https://github.com/vercel/serve/blob/main/bin/serve.js#L117)運行容器時,請確保使用以下方法公開埠
docker run -p 5000:5000 ...如果需要告訴您的 docker 主機的防火墻允許流量到 <ip>:5000
現在,如果您連接到 http://<ip>:5000,您應該會看到應用程式的回應。
uj5u.com熱心網友回復:
您的應用程式正在偵聽埠 3000。因此,您需要將要在主機上使用的任何埠映射到埠 3000。如果要使用埠 5000,則應使用-p 5000:3000. 然后您應該能夠localhost:5000在主機上使用它來訪問它。
您應該將容器視為與主機分離的機器。因此,當容器說它正在偵聽 localhost:3000 時,這意味著容器背景關系中的 localhost。不是主持人。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/351354.html
上一篇:音樂椅問題在C 中的實作
下一篇:總計第四列
