簡體   English   中英

如何將 nginx docker 鏡像暴露到 80 以外的端口?

[英]How to expose nginx docker image to port other than 80?

我有.Dockerfile (來自源代碼):

# build stage
FROM node:9.11.1-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# production stage
FROM nginx:1.13.12-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

應用程序最終暴露在端口80的位置。 然后我有另一個不同的.Dockerfile並且為了構建它們,我使用以下docker-compose.yml文件:

version: "3"
services:
  service-name-one:
    image: dockerImageFromAbove
    ports:
      - "8080:80"
  service-name-two:
    image: someOtherImage
    ports:
      - "3000:3001"

這是實際有效的示例。 但是我需要從nginx docker 映像更改端口,而不是端口 80,我需要端口 8081。通過從上面的兩個文件中簡單地更改它,它不起作用,在我的研究中,我發現唯一有效的例子是從 nginx 暴露到端口 80 時。 我嘗試更換線路

EXPOSE 8081

RUN -P 80:8081
EXPOSE 8081

但似乎這里不支持 -P 標志。 那么在將 nginx 暴露於 80 端口之前,我該如何進行這樣的映射呢?

我找到了這篇文章,但我不知道如何在我的 docker 文件中使用答案。

我還找到了這篇文章(環境變量的一部分),但也不確定如何將它與我的 docker-compose 文件集成。

第二個文件不是 Dockerfile 而是 docker-compose.yml,您必須在 docker-compose.yml 中更改端口,就可以了。 當您使用命令 docker run 時,選項 -p "hostport:containerport" 會公開端口。 無論如何,我建議您在過多更改 dockerfile 中的圖像之前使用受支持的官方圖像。

無論如何,如果你真的需要 8081 試試這樣的

version: "3"
services:
  service-name-one:
    image: yournginxOrSomethingelse
    ports:
      - "8080:80"
      - "8085:8081"

我相信-P需要小寫: -p (這是用於命令行命令,而不是 Dockerfile) 語法是:

Dockerfile:

....
EXPOSE 80
....

命令行:

docker run -d -p 8081:80 --name my-service my-service:latest

暫無
暫無

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

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