【问题标题】:Running a standard .NET Console Application in docker container在 docker 容器中运行标准的 .NET 控制台应用程序
【发布时间】:2019-11-08 11:17:13
【问题描述】:

我正在尝试将一个非常简单的控制台应用程序作为 Windows docker 容器运行。我有一个使用“dotnet-framework:4.7.2-runtime-windowsservercore-1803”基础映像的 docker 文件,如下所示。

FROM microsoft/dotnet-framework:4.7.2-runtime-windowsservercore-1803
ARG source
WORKDIR /app
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT "DockerConsoleApp.exe"

控制台应用程序只是每 5 秒将“Hello World”输出到日志文件”

static void Main(string[] args)
    {
        while (true)
        {
            try
            {
                Thread.Sleep(5000);
                _logger.Info("Hello Wolrd");
            }
            catch (Exception e)
            {
                //handle the exception 
                Console.Error.WriteLine(e);
            }
        }


    }

我正在使用以下 docker compose 文件

version: '3.4'

services:
  dockerconsoleapp:
    image: dockerconsoleapp:dev
    build:
      context: .\
      args:
        source: obj\Docker\publish
    volumes:
      - C:\Users\user\source\repos\DockerConsoleApp\DockerConsoleApp:C:\app
      - C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Remote Debugger:C:\remote_debugger:ro
      - C:\Users\user\source\repos\DockerConsoleApp\VolumeTest:C:\app\logs

问题是,只要我手动构建或运行“docker-compose up -d”,容器就会被创建,然后立即死亡。我希望容器应该保持运行,因为正在入口点调用应用程序,并且应用程序应该继续运行,除非手动停止。

【问题讨论】:

  • 您可能收到了异常。为您的容器检查 docker logs
  • docker logs 指出了我的权利。该错误表明 DockerConsoleApp 未被识别为内部命令。它也没有任何其他变体,例如.\DockerConsoleApp 等。我将更新修复
  • 这意味着您的容器映像无效,与 docker-compose 或 docker 一般无关。指着我的右手是什么意思?
  • 抱歉错字。码头日志为我指明了正确的方向。我添加了 "SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]" 到 FROM 行下的 dockerfile。然后我将入口点更改为“ENTRYPOINT”.\DockerConsoleApp.exe”。这让它运行时间更长,但它在 10 秒后退出

标签: .net docker console-application docker-for-windows


【解决方案1】:

最后,解决方法是将 ENTRYPOINT 更改为 dockerfile 中的 CMD。见下文。

FROM microsoft/dotnet-framework:4.7.2-runtime-windowsservercore-1803
ARG source
WORKDIR /app
COPY ${source:-obj/Docker/publish} .
CMD ["DockerConsoleApp.exe"]

我已经让它运行了一夜,现在容器已经运行了 15 个小时。

【讨论】:

    【解决方案2】:

    您的容器很可能由于您的 ENTRYPOINTENTRYPOINT 本身无效的异常而死亡。您可以检查docker logs 找出原因。

    【讨论】:

    • docker logs 现在只是输出“.\DockerConsoleApp.exe”。我相信 exe 仍然没有运行,因为我的本地卷位置没有任何内容
    • 这似乎是由 Visual Studio 生成的。制作自己的 dockerfile 以了解 docker 的工作原理。我没有看到根据入口点指定日志的任何配置。您可以从应用程序输出到控制台以验证它是否运行,而不是在本地记录
    猜你喜欢
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 2020-11-17
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多