webdevqa.jp.net

dockerfileを使用して.NETコアプロジェクトにパラメーターを渡す方法

。NETコアプロジェクトがあります(Visual Studioを使用し、 Visual Studio Tools for Docker を介してDockerファイルを追加します)。

私のDockerFileは次のようになります:

FROM Microsoft/dotnet:1.0.1-core
ARG source=.
WORKDIR /app
COPY $source .
ENTRYPOINT ["dotnet", "MyApp.dll"]
CMD ["arg1", "arg2"]

私の質問は、どのようにパラメータをプロジェクトに渡すのですか?

public static void Main(string[] args)
{
    // how does `args` get populated?
}

enter image description here

15
devlife

docker-compose.ymlでも設定できる環境変数を使用しました

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;
        }
    }
}
3
cilerler

これは、ENTRYPOINTを組み合わせてコマンドを設定し、CMDを組み合わせてデフォルトオプションを設定することで実行できます。

例、ASP.NETCoreアプリの場合:

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

コマンドなしでコンテナを実行すると、コンテナの起動時に次のコマンドが実行されます。

dotnet app.dll argument

そして、args配列には「argument」という1つのエントリがあります。ただし、コマンドを渡すことはできますo docker runCMD定義をオーバーライドするには:

docker run app arg1 arg2
4
Elton Stoneman

Docker用のVSツールは、CMD引数とENTRYPOINT引数をサイレントにオーバーライドしているように見えます。 Visual Studioでdocker-composeプロジェクトをデバッグするときにコマンドラインを渡す方法 および https://github.com/Microsoft/DockerTools/issues/75 を参照してください。

0
Gazi

1つのアプローチは、環境変数を読み込むことです。これを行うためにDockerfileを変更することはありません。むしろ、次のようにコンテナを実行するとします。

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

ここで理解する必要があるのは、dotnetcoreアプリケーションでFOO環境変数を読み取る方法だけです。ここに記載されているアプローチを試してみます: ASP .NET Core読み取り環境変数

0
Nico de Wet