docker - 如何将 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"
这是实际有效的示例。但是我需要从nginx
docker 映像更改端口,而不是端口 80,我需要端口 8081。通过从上面的两个文件中简单地更改它,它不起作用,在我的研究中,我发现唯一有效的例子是当从 nginx 暴露到端口 80。我尝试更换线路
EXPOSE 8081
和
RUN -P 80:8081
EXPOSE 8081
但似乎这里不支持 -P 标志。那么在将 nginx 暴露于 80 端口之前,我该如何进行这样的映射呢?
我找到了这篇文章,但我不知道如何在我的 docker 文件中使用答案。
我还找到了这篇文章(环境变量的一部分),但也不确定如何将它与我的 docker-compose 文件集成。
解决方案
第二个文件不是 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"
推荐阅读
- python - 在 Python 速成课程练习中数小时无法解决 NameError
- c# - XMLSerializer 找到未知节点
- php - 保护 Markdown 生成的 HTML 上的 XSS
- azure-sdk-.net - 从存储在另一个存储帐户中的 VHD 创建 OS 磁盘
- bash - 如何仅获取 bash ssh 版本号?
- javascript - 如何将数据从 api 推送到数据集中
- react-native - 如何使 createMaterialTopTabNavigator tabBar 背景颜色为线性渐变
- flutter - 如何在颤振中使用 Navigator.pop() 方法传递多个值?
- javascript - 如何在 Visual Studio 中以所有形式更新 javascript 文件的版本
- c# - 从 Chocolatey 生成的 exe 有他们的 Logo 和描述。有没有办法改变这个?