通过Visual Studio运行Docker. net控制台应用程序与通过Docker Run运行Docker. net控制台应用程序有什么区别?

olhwl3o2  于 2022-11-17  发布在  Docker
关注(0)|答案(1)|浏览(142)

抱歉,如果这是一个愚蠢的问题,我是相对新的 Docker ,这可能只是一个误解,对我的一部分。
我有一个dotnet 6控制台应用程序正在部署到Docker。当我通过Visual Studio Docker启动设置运行这个应用程序时,它工作正常,我可以在Docker中看到日志。但是,如果我转到Docker桌面中的映像,并使用运行选项启动它,我看不到任何日志,而且据我所知,这个应用程序实际上根本没有运行。
那么,这两种发射方式有什么区别呢?除了一种有效,一种无效之外?!
我已经尝试提供一些与Visual Studio放在它自己的Docker Run命令中的环境变量参数相同的参数,但似乎不起作用。
谢谢你!
更新:这里是我可以重现问题的dockerfile-它只是当您添加Docker支持时VS生成的默认文件:

FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["ConsoleApp1/ConsoleApp1.csproj", "ConsoleApp1/"]
RUN dotnet restore "ConsoleApp1/ConsoleApp1.csproj"
COPY . .
WORKDIR "/src/ConsoleApp1"
RUN dotnet build "ConsoleApp1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "ConsoleApp1.csproj" -c Release -o /app/publish /p:UseAppHost=false

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

应用程序本身只是当您要求VS添加一个新的控制台应用程序时创建的锅炉板。如果我通过Visual Studio运行,它确实会打印“Hello,World!”-然而,如果我在Docker Desktop中对Image使用Run选项,或者我使用Docker Run,容器会旋转起来,但日志中没有任何内容。
这发生在两台不同的计算机上。

xkftehaa

xkftehaa1#

您提供的项目相关信息非常少,因此很难说出问题所在。一般而言,在容器中执行主控台应用程序与在容器外执行非常类似。
如果您使用以下Dockerfile创建新的控制台应用程序并构建它

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
RUN dotnet new console -o . --name myapp
RUN dotnet publish -o /app
FROM mcr.microsoft.com/dotnet/runtime:6.0
WORKDIR /app
COPY --from=build /app .
CMD ["dotnet", "myapp.dll"]

然后可以使用

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

它会打印出“Hello,World!”

相关问题