gpt4 book ai didi

docker - 使用docker部署vue前端和.net后端,前端不解析后端容器名

转载 作者:行者123 更新时间:2023-12-05 02:35:23 25 4
gpt4 key购买 nike

我正在尝试在前端部署一个 Vue 应用程序,在后端部署 .net 核心 api。使用 docker-compose 文件,我已经能够启动网络和容器,但我正在努力让它们进行通信。然而,我对 docker 很陌生,请理解 Vue 应用程序 dockerfile 使用 Nginx 基础来提供网络应用程序,但它似乎可能会影响网络通信,因为前端容器不解析后端容器名称,尽管它应该解析,因为它们与默认网桥驱动程序位于同一虚拟专用网络中。在前端容器中执行 bash shell 并对后端容器执行 curl 时,我确实得到了正确的响应。

我确实尝试将后端容器暴露给主机,然后使用服务器 IP 从前端访问它,这确实有效,但我希望不必以这种方式暴露我的 api,并希望它能正常工作如果可能,通过 docker 虚拟专用网络。

我在前端尝试的示例 url 遇到名称未解析错误:littlepiggy-api/api 或 littlepiggy-api:5000/api

前端 Dockerfile

FROM node:14.18-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY ./ .
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

后端 Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 5000

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["LittlePiggy.Api/LittlePiggy.Api.csproj", "LittlePiggy.Api/"]
RUN dotnet restore "LittlePiggy.Api/LittlePiggy.Api.csproj"
COPY . .
WORKDIR "/src/LittlePiggy.Api"
RUN dotnet build "LittlePiggy.Api.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "LittlePiggy.Api.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "LittlePiggy.Api.dll"]

Docker-compose 文件

version: '3'
services:

front:
container_name: littlepiggy-front
image: josh898/angie-app-front:latest
ports:
- 80:80
networks:
- littlepiggy
depends_on:
- api

api:
container_name: littlepiggy-api
image: josh898/angie-app-backend:latest
networks:
- littlepiggy

networks:
littlepiggy:
driver: bridge

最佳答案

您需要配置 Nginx 以将与/api 路由匹配的请求传递到后端服务。

如果您像这样创建一个名为 nginx.conf 的 nginx 配置文件,并将其放在您的前端目录中

server { 
listen 80;

location / {
index index.html;
root /usr/share/nginx/html;
try_files $uri $uri/ $uri.html =404;
}

location /api/ {
proxy_pass http://littlepiggy-api/;
}
}

然后通过将前端 Dockerfile 更改为将其复制到前端容器中

FROM node:14.18-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY ./ .
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

然后应该将对 http://localhost/api/xxxx 的请求传递到后端,而对 http://localhost/index.html 的请求应该由 Nginx 容器直接提供服务。

关于docker - 使用docker部署vue前端和.net后端,前端不解析后端容器名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70583664/

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