簡體   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