[英]Command-line arguments are not passed to the Docker container entrypoint
我創建了一個控制台應用程序來運行Benchmark.Net 庫的基准測試。 這個應用程序被打包到一個 Docker 容器中,它是 docker-compose 場景的一部分。 該ENTRYPOINT
的dockerfile
如下所示:
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Benchmarks.dll", "-f", "*"]
這些參數指示 Benchmark.Net 庫運行該程序集中的所有測試。
問題:參數永遠不會傳遞給控制台應用程序。 docker-compose 沒有command
或entrypoint
元素,它只是引用dockerfile
。 如果我將CMD
與ENTRYPOINT
結合使用,它沒有任何效果:
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.