gpt4 book ai didi

docker - 在现有的 asp.net core docker 容器上安装 nginx

转载 作者:行者123 更新时间:2023-12-01 09:13:40 27 4
gpt4 key购买 nike

我目前正在为 ASP.NET Core WebAPI 项目运行 docker 容器。
此 Web 服务当前在端口 80 上公开。

我的 dockerfile 看起来像这样:

FROM microsoft/dotnet:2.1-aspnetcore-runtime
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "testapi.dll"]

我想安装 nginx 作为服务和暴露的公共(public)网络之间的层。

最终结果应该是 ASP.NET 在仅内部端口 90 上运行,并且 nginx 网络服务器将本地 90 转发到公共(public) 80 端口。

这可能吗?如果是这样,我怎样才能实现这样的架构?顺便说一句,我完全意识到额外层造成的开销。

谢谢!

最佳答案

执行此操作的 Docker 方法是为这两个服务提供两个容器。 Docker-compose 是一个帮助管理多容器应用程序的工具。

以下 docker-compose.yml 应该适合您:

version: '3'

services:
app:
build:
context: ./dotnet
dockerfile: Dockerfile
expose:
- "80"

proxy:
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- "80:80"
links:
- app

基本上,我们为您的应用程序公开端口,以便 Nginx 容器可以访问它,然后我们将 Nginx 容器上的端口绑定(bind)到您主机上的端口。

您将 Dockerfile 和应用程序放在“dotnet”文件夹中,并将 NginX 逻辑放在/nginx/Dockerfile 文件中。

编辑:如果您真的想在一个容器中同时拥有这两种服务,您可以使用以下内容:
FROM microsoft/dotnet:2.1-aspnetcore-runtime

ENV ASPNETCORE_URLS https://*:8080

RUN apt update && \
apt install nginx
ADD nginx-website.conf /etc/nginx/sites-enabled
RUN service nginx restart

ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "testapi.dll"]

此时您只需要创建 Nginx 配置文件“nginx-website.conf”并设置端口 80 到 8080 的反向代理即可。

关于docker - 在现有的 asp.net core docker 容器上安装 nginx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51264577/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com