Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在dockerfile中为.net核心应用程序指定环境变量_Docker_Asp.net Core_Amazon Ecs_Aws Ecr - Fatal编程技术网

在dockerfile中为.net核心应用程序指定环境变量

在dockerfile中为.net核心应用程序指定环境变量,docker,asp.net-core,amazon-ecs,aws-ecr,Docker,Asp.net Core,Amazon Ecs,Aws Ecr,我有一个.net core 3.1应用程序,作为docker容器部署在aws ecs上。现在我想在dockerfile中指定环境变量,我试图在代码中使用它,但每次都没有得到任何值 以下是.net核心: private IWebHostEnvironment Environment { get; set; } public IConfiguration Configuration { get; set; } public void Configu

我有一个.net core 3.1应用程序,作为docker容器部署在aws ecs上。现在我想在dockerfile中指定环境变量,我试图在代码中使用它,但每次都没有得到任何值

以下是.net核心:

        private IWebHostEnvironment Environment { get; set; }
        public IConfiguration Configuration { get; set; }


        public void ConfigureServices(IServiceCollection services)
        {
          var builder = new ConfigurationBuilder()
           .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
           .AddJsonFile($"appsettings.{Environment.EnvironmentName}.json", optional: true)
           .AddEnvironmentVariables();
现在我想用我在Dockerfile中指定的值替换environment.EnvironmentName,但它不起作用。 另外,我在某个地方读到,我可以在执行docker run命令时指定环境变量,但在我的情况下,我不能这样做,因为aws ecs正在运行docker容器

这是docker文件:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

# Copy everything else and build
COPY . ./
ENV ASPNETCORE_ENVIRONMENT Development

RUN dotnet restore Isofy-Api/*.csproj
RUN dotnet publish Isofy-Api/*.csproj -c Release -o out


# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "Isofy-Api.dll"]

我做错了什么?

您应该在最终图像中指定环境变量

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
ENV ASPNETCORE_ENVIRONMENT Development
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "Isofy-Api.dll"]

您应该在最终图像中指定环境变量

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
ENV ASPNETCORE_ENVIRONMENT Development
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "Isofy-Api.dll"]

我认为最好在任务定义环境变量上指定ASPNETCORE_环境变量,而不是Dockerfile本身。这将允许您根据要部署到的环境(如测试/生产等)更改ASPNETCORE_环境

如果希望通过docker compose在本地运行,请在docker compose中的服务定义中添加环境变量


我认为最好在任务定义环境变量上指定ASPNETCORE\u环境变量,而不是Dockerfile本身。这将允许您根据要部署到的环境(如测试/生产等)更改ASPNETCORE_环境

如果希望通过docker compose在本地运行,请在docker compose中的服务定义中添加环境变量


与在docker或env文件中使用环境变量不同,我更喜欢为每个环境使用单独的aws-ecs-tools-defaults.json,并使用命令行发布:

dotnet ecs deploy-scheduled-task  --cfg aws-ecs-tools-defaults.json --container-environment-variables EnvironmentVariableName1=test1;EnvironmentVariableName1=test1
如果您尚未安装dotnet ecs,可以通过以下方式安装:

dotnet tool install --global Amazon.ECS.Tools

与在docker或env文件中使用环境变量不同,我更喜欢为每个环境使用单独的aws-ecs-tools-defaults.json,并使用命令行发布:

dotnet ecs deploy-scheduled-task  --cfg aws-ecs-tools-defaults.json --container-environment-variables EnvironmentVariableName1=test1;EnvironmentVariableName1=test1
如果您尚未安装dotnet ecs,可以通过以下方式安装:

dotnet tool install --global Amazon.ECS.Tools
如中最初所述,您可以尝试将入口点更改为
entrypoint[“dotnet”、“Isofy Api.dll”、“--environment=Development”]
如中最初所述,您可以尝试将入口点更改为
entrypoint[“dotnet”、“Isofy Api.dll”、“--environment=Development”]