如何将nginx docker映像暴露给80以外的端口?

时间:2019-01-15 22:17:44

标签: docker nginx docker-compose dockerfile docker-image

我有.Dockerfile(来自source):

# 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码头工人镜像更改端口,而不是端口80,我需要具有端口8081。通过从上面的两个文件中简单地更改此端口,它不起作用,在我的研究中我发现唯一的工作示例是从nginx暴露到端口80时。 我尝试更换线

EXPOSE 8081

使用

RUN -P 80:8081
EXPOSE 8081

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

我找到了this post,但是我不知道如何在我的docker文件中使用答案。

我还发现了this post(环境变量的一部分),但还不确定如何将其与我的docker-compose文件集成。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-2)

我相信 -P 需要小写: -p (这是用于命令行命令,而不是Dockerfile)语法是:

Dockerfile:

....
EXPOSE 80
....

命令行:

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