首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法连接到Azure容器实例.net核心MVC Linux容器

无法连接到Azure容器实例.net核心MVC Linux容器
EN

Stack Overflow用户
提问于 2021-04-13 13:45:35
回答 1查看 252关注 0票数 0

作为一个整体,我对Docker和Azure还很陌生,所以请容忍我..

对于初学者来说

我有一个基于Linux容器的Docker Image,我能够在本地运行并成功连接到它。

这是我放在一起的dockerfile

代码语言:javascript
复制
#Use microsoft's sdk image for build
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /app 

#1. copy csproj and restore as distinct layers
COPY *.sln .
COPY Client.Web/*.csproj ./Client.Web/
COPY DataOneDecoder/*.csproj ./DataOneDecoder/
COPY DealershipTenant/*.csproj ./DealershipTenant/
COPY Portal.Web/*.csproj ./Portal.Web/ 
COPY Multitenancy/*.csproj ./Multitenancy/ 
COPY Shared/*.csproj ./Shared/
COPY AdfSerialization/*.csproj ./AdfSerialization/

#2. dotnet-restore
RUN dotnet restore 

#3. copy everything else and build app
COPY Client.Web/. ./Client.Web/
COPY DataOneDecoder/. ./DataOneDecoder/
COPY DealershipTenant/. ./DealershipTenant/ 
COPY Portal.Web/. ./Portal.Web/
COPY Multitenancy/.  ./Multitenancy/
COPY Shared/. ./Shared/
COPY AdfSerialization/. ./AdfSerialization/

#4. Install nodejs and npm
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get install -y nodejs
RUN echo "NODE Version: " && node --version
RUN echo "NPM Version: " && npm --version


#5. Navigate to Portal.Web and install npm dependencies
WORKDIR /app/Portal.Web
RUN npm install

#6. Build and publish solution
WORKDIR /app/
RUN dotnet publish -c Release -o out 

#7. Copy built application to runtime image, expose port 5000, and define entrypoint
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS runtime
COPY --from=build /app/out ./
EXPOSE 5000
ENV ASPNETCORE_URLS http://*:5000
ENTRYPOINT ["dotnet", "Portal.Web.dll"]

在本地,我可以使用以下命令在端口80上打开映射到端口5000 (在dockerfile中公开)的应用程序

代码语言:javascript
复制
docker build  -t exampleApp  . --no-cache  
docker run -d -p 80:5000 --name exampleContainer exampleApp

现在在Azure的土地上,我已经设置了一个gitlab管道,它构建容器并将其部署到我的Azure容器注册表。

在此基础上,我将使用CLI将容器部署到container Group,并最终作为Container实例

代码语言:javascript
复制
az container create \
    --name dstestacg \
    --resource-group $RES_GROUP \
    --image $ACR_LOGIN_SERVER/portal_web_test:38b63ff933ea5a04b9ed7906ee01db33afb9abb6 \
    --registry-login-server $ACR_LOGIN_SERVER \
    --registry-username $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-usr --query value -o tsv) \
    --registry-password $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-pwd --query value -o tsv) \
    --restart-policy Never \
    --ip-address Public \
    --cpu 2 \
    --memory 3.5 \
    --ports 80 \
    --environment-variables 'ASPNETCORE_URLS'='http://*:5000' \
    --command-line "tail -f /dev/null"

看起来应用程序正在运行(我看到资源使用峰值,比应用程序不运行时更多),但我无法通过端口80连接到公共ip。我在浏览器中出现了一个"ERR_CONNECTION_RESET“错误

我不太清楚这是如何在非windows机器上运行的。我相信它是与Kestrel一起使用的,我假设我本地的Linux容器正在使用它。我不确定为什么我可以在本地访问端口80上的容器,但不能作为Azure容器实例。

任何帮助都将不胜感激,如果你需要更多的细节,请询问。

谢谢!

在讨论了端口映射之后更新了Docker文件和Azure CLI命令

代码语言:javascript
复制
#Use microsoft's sdk image for build
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /app 

#1. copy csproj and restore as distinct layers
COPY *.sln .
COPY Client.Web/*.csproj ./Client.Web/
COPY DataOneDecoder/*.csproj ./DataOneDecoder/
COPY DealershipTenant/*.csproj ./DealershipTenant/
COPY Portal.Web/*.csproj ./Portal.Web/ 
COPY Multitenancy/*.csproj ./Multitenancy/ 
COPY Shared/*.csproj ./Shared/
COPY AdfSerialization/*.csproj ./AdfSerialization/

#2. dotnet-restore
RUN dotnet restore 

#3. copy everything else and build app
COPY Client.Web/. ./Client.Web/
COPY DataOneDecoder/. ./DataOneDecoder/
COPY DealershipTenant/. ./DealershipTenant/ 
COPY Portal.Web/. ./Portal.Web/
COPY Multitenancy/.  ./Multitenancy/
COPY Shared/. ./Shared/
COPY AdfSerialization/. ./AdfSerialization/

#4. Install nodejs and npm
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get install -y nodejs
RUN echo "NODE Version: " && node --version
RUN echo "NPM Version: " && npm --version


#5. Navigate to Portal.Web and install npm dependencies
WORKDIR /app/Portal.Web
RUN npm install

#6. Build and publish solution
WORKDIR /app/
RUN dotnet publish -c Release -o out 

#7. Copy built application to runtime image, expose port 5000, and define entrypoint
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS runtime
COPY --from=build /app/out ./
EXPOSE 5000/tcp
ENV ASPNETCORE_URLS=http://*:5000
ENV ASPNETCORE_ENVIRONMENT=Development
ENTRYPOINT ["dotnet", "Portal.Web.dll"]
代码语言:javascript
复制
az container create \
    --name idkman \
    --resource-group $RES_GROUP \
    --image $ACR_LOGIN_SERVER/portal_web_test:deb5e784f1a7f9904f50a97b93ff42380b85158c \
    --registry-login-server $ACR_LOGIN_SERVER \
    --registry-username $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-usr --query value -o tsv) \
    --registry-password $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-pwd --query value -o tsv) \
    --restart-policy Never \
    --ip-address Public \
    --cpu 2 \
    --memory 3.5 \
    --ports 5000 \
    --environment-variables 'PORT'='5000'
EN

回答 1

Stack Overflow用户

发布于 2021-04-13 14:24:59

ACI不支持端口映射,所以只能直接暴露您在Dockerfile中暴露的端口,这里的端口应该是5000。然后你就可以像http://publicIP:5000一样访问ACI了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67069309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档