【发布时间】:2019-06-09 23:39:41
【问题描述】:
我有.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 docker image 更改端口,而不是端口 80,我需要使用端口 8081。通过从上面的两个文件中简单地更改它,它不起作用,在我的研究中我发现唯一的工作例如从 nginx 暴露到端口 80 时。
我试着换行
EXPOSE 8081
与
RUN -P 80:8081
EXPOSE 8081
但这里似乎不支持 -P 标志。那么在将 nginx 暴露到 80 端口之前,我该如何做这样的映射呢?
我找到了this post,但我不知道如何在我的 docker 文件中使用答案。
我还找到了this post(环境变量的一部分),但也不确定如何将它与我的 docker-compose 文件集成。
【问题讨论】:
-
为什么需要更改 Docker 端的端口号?最后希望得到什么样的配置?
-
你更新
/etc/nginx/conf.d/default.conf中的nginx配置文件了吗?它可能只监听 80 端口。 -
不过,我不明白您为什么需要更改容器的端口。您是要绑定到主机上的 8081 而不是 8080,还是要在 8081 而不是 80 上绑定容器?
-
@JoelMagnuson 当我的 VueJS 应用程序正在侦听端口 8081 并且在进行分段部署(开发模式)时,这是我需要映射到的端口。上面的
.Dockerfile用于生产部署(在生产模式下)。我想为两种部署情况保留相同的docker-compose.yml文件,并且我不想更改应用程序中的内部 8081 端口,这会导致场景中的端口更改为泊坞窗图像。 -
@DavidMaze 请看我上面的评论
标签: docker nginx docker-compose dockerfile docker-image