dev*_*ife 14 docker dockerfile docker-for-windows docker-desktop
我有一个.NET Core项目(使用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"]
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何将参数传递给项目?
public static void Main(string[] args)
{
// how does `args` get populated?
}
Run Code Online (Sandbox Code Playgroud)
您可以结合使用ENTRYPOINT来设置命令和CMD设置默认选项。
例如,对于ASP.NET Core应用程序:
ENTRYPOINT ["dotnet", "app.dll"]
CMD ["argument"]
Run Code Online (Sandbox Code Playgroud)
如果不使用任何命令运行容器,则它将在容器启动时执行以下命令:
dotnet app.dll argument
Run Code Online (Sandbox Code Playgroud)
并且该args数组将只有一个条目“参数”。但是您可以传递命令o docker run来覆盖CMD定义:
docker run app arg1 arg2
Run Code Online (Sandbox Code Playgroud)
我用它可以通过设置环境变量搬运工,compse.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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5127 次 |
| 最近记录: |