How to pass parameters to a .NET core project with dockerfile

半腔热情 提交于 2019-12-04 23:28:11

I used environment variables which can be set by docker-compse.yml too

public static class EnvironmentHelper
{
    public const string EnvironmentArguments = "DOTNETCORE_ARGUMENTS";
    private static string[] _arguments;
    public static string[] Arguments
    {
        get
        {
            bool argumentsExist = _arguments != null && _arguments.Any();
            if (!argumentsExist)
            {
                IDictionary environmentVariables = Environment.GetEnvironmentVariables();
                if (!environmentVariables.Contains(EnvironmentArguments))
                {
                    throw new Exception("Environment Arguments do not exist");
                }
                var argumentsHolder = environmentVariables[EnvironmentArguments] as string;
                const char argumentSeparator = ' ';
                _arguments = argumentsHolder?.Split(argumentSeparator);
            }
            return _arguments;
        }
    }
}

You can do this with a combination of ENTRYPOINT to set the command, and CMD to set default options.

Example, for an ASP.NET Core app:

ENTRYPOINT ["dotnet", "app.dll"]
CMD ["argument"]

If you run the container with no command, it will execute this command when the container starts:

dotnet app.dll argument

And the args array will have one entry, "argument". But you can pass a command o docker run to override the CMD definition:

docker run app arg1 arg2
Nico de Wet

One approach would be to read in environment variables. You would not modify your Dockerfile to do this. Rather, say you run up your container as follows:

$ FOO="bar"
$ docker run -e FOO=$FOO devlife/myapp

All you now need to figure out is how to read the FOO environment variable in your dotnetcore application. I would try the approach documented here: ASP .NET Core read environment variables

VS Tools for Docker appear to silently override CMD and ENTRYPOINT arguments. Please see How to pass command line when debugging docker-compose project in Visual Studio? and https://github.com/Microsoft/DockerTools/issues/75

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!