繁体   English   中英

命令行参数不会传递到 Docker 容器入口点

[英]Command-line arguments are not passed to the Docker container entrypoint

我创建了一个控制台应用程序来运行Benchmark.Net 库的基准测试。 这个应用程序被打包到一个 Docker 容器中,它是 docker-compose 场景的一部分。 ENTRYPOINTdockerfile如下所示:

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Benchmarks.dll", "-f", "*"]

这些参数指示 Benchmark.Net 库运行该程序集中的所有测试。

问题:参数永远不会传递给控制台应用程序。 docker-compose 没有commandentrypoint元素,它只是引用dockerfile 如果我将CMDENTRYPOINT结合使用,它没有任何效果:

ENTRYPOINT ["dotnet", "Benchmarks.dll"]
CMD [ "-f", "*" ]

我需要在 CI 上运行它,因此应始终传递默认参数。

我究竟做错了什么? 如何使它工作?

更新:如果我使用纯docker run命令运行它,它就可以正常工作并获取传递的参数。 事实证明,当我从docker-compose运行它时,它不会打印任何内容。 docker-compose.yml的服务定义非常简单,它只是引用了Dockerfile

  benchmarks:
    build:
      context: ../
      dockerfile: test/Benchmarks/Dockerfile
      args:
        - NUGET_SOURCE
    depends_on:
      - another.service
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
      - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro

我试图重现你的问题,但我不能。

这是我的程序(我做了dotnet new console并将 Program.cs 更改为这个)

using System;

namespace app
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (var arg in args)
            {
                Console.WriteLine(arg);
            }
        }
    }
}

还有我的 Dockerfile

FROM mcr.microsoft.com/dotnet/sdk:5.0 as publish
WORKDIR /app
COPY . ./
RUN dotnet publish -o out app.csproj

FROM mcr.microsoft.com/dotnet/runtime:5.0
WORKDIR /app
COPY --from=publish /app/out .
ENTRYPOINT ["dotnet", "app.dll", "-f", "*"]

然后我构建并运行它

docker build -t test .
docker run --rm test

它打印

-f
*

就像你期望的那样。

所以参数被传递给程序。 您的问题可能是您没有将它们正确传递给 Benchmark?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM