我试图将一个非常简单的控制台应用程序作为Windows docker容器运行。我有一个使用“ dotnet-framework:4.7.2-runtime-windowsservercore-1803”基本映像的泊坞窗文件。
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”,就会创建容器,然后立即死亡。我希望容器应该保持打开状态,因为在入口点中正在调用该应用程序,并且除非手动停止,否则该应用程序应该继续运行。
答案 0 :(得分:1)
您的容器最有可能是由于ENTRYPOINT
或ENTRYPOINT
本身无效而导致的异常而死亡。您可以检查docker logs
找出原因。
答案 1 :(得分:0)
最后,解决方法是将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个小时。