如何将nginx docker镜像暴露到80端口以外的端口?

3

我有一个 .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端口。请注意保留HTML标记。

EXPOSE 8081

使用

RUN -P 80:8081
EXPOSE 8081

但是似乎这里不支持-P标志。那么,在将nginx暴露到80端口之前,我该如何进行这样的映射呢?
我在这篇文章中找到了答案,但我不知道如何在我的docker文件中使用这些答案。
我还在这篇文章中找到了环境变量部分,但也不确定如何将其与我的docker-compose文件集成。

你为什么需要更改Docker端口号?最终希望得到什么配置? - David Maze
1
你更新了位于 /etc/nginx/conf.d/default.conf 的 nginx 配置文件吗?它可能只监听了 80 端口。 - Joel Magnuson
我不太明白为什么你需要更改容器的端口。你是想将容器绑定到主机上的8081端口而不是8080端口,还是想让容器在8081端口上而不是80端口上运行呢? - Joel Magnuson
@JoelMagnuson 当我的VueJS应用程序正在监听端口8081时,在进行分期部署(开发模式)时,这是我需要映射的端口。上面的.Dockerfile是为生产部署(生产模式)而设计的。我想在部署的两种情况下保持相同的docker-compose.yml文件,并且不想更改应用程序中的内部8081端口,这将导致必须更改docker镜像中的端口。 - delux
@DavidMaze,请查看我上面的评论。 - delux
2个回答

1
第二个文件不是Dockerfile,而是docker-compose.yml,你需要在docker-compose.yml中更改端口,然后就可以了。 选项-p“hostport:containerport”在使用docker run命令时公开端口。 无论如何,我建议您在修改dockerfile中的图像之前先使用支持和官方的图像。 无论如何,如果您真的需要8081,请尝试类似于此的内容。
version: "3"
services:
  service-name-one:
    image: yournginxOrSomethingelse
    ports:
      - "8080:80"
      - "8085:8081"

-3
我认为-P需要小写:-p(这是针对命令行指令而非Dockerfile)。语法如下:

Dockerfile:

....
EXPOSE 80
....

命令行:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接