首页 > 解决方案 > 如何将 nginx docker 镜像暴露到 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"

这是实际有效的示例。但是我需要从nginxdocker 映像更改端口,而不是端口 80,我需要端口 8081。通过从上面的两个文件中简单地更改它,它不起作用,在我的研究中,我发现唯一有效的例子是当从 nginx 暴露到端口 80。我尝试更换线路

EXPOSE 8081

RUN -P 80:8081
EXPOSE 8081

但似乎这里不支持 -P 标志。那么在将 nginx 暴露于 80 端口之前,我该如何进行这样的映射呢?

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

我还找到了这篇文章(环境变量的一部分),但也不确定如何将它与我的 docker-compose 文件集成。

标签: dockernginxdocker-composedockerfiledocker-image

解决方案


第二个文件不是 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"

推荐阅读