我有.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文件集成。
答案 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