如何解决从Docker容器在exe内部执行打印
Program.exe类似于:
int main()
{
printf("Hey,there!\n");
return 0;
}
Dockerfile就像:
FROM mcr.microsoft.com/windows/servercore:2004
USER ContainerAdministrator
COPY Debug/. ./bin/
COPY log/. ./log/
RUN Powershell.exe -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x86.exe -OutFile 'c:\vc_redist.x86.exe' ; Start-Process c:\vc_redist.x86.exe -ArgumentList '/passive' -RedirectStandardOutput 'c:\Windows\System32' -Wait ; Remove-Item c:\vc_redist.x86.exe -Force
当我运行容器并导航到C:/ bin以执行Program.exe时,没有任何内容打印到控制台,并且Program.exe退出而没有错误。 可以正常使用Program.exe依赖的所有DLL和Lib(已通过procmon和dependency walker进行了验证),并且vcredist已正确安装。
docker logs
命令不记录任何内容。
Program.exe在主机中可以正常运行。
在这种情况下如何打印到控制台?
解决方法
在生成映像时执行RUN,而不是在运行容器时使用ENTRYPOINT或CMD执行。看看最好的做法here
FROM mcr.microsoft.com/windows/servercore:2004
USER ContainerAdministrator
COPY Debug/. ./bin/
COPY log/. ./log/
RUN Powershell.exe -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x86.exe -OutFile 'c:\vc_redist.x86.exe' ; Start-Process c:\vc_redist.x86.exe -ArgumentList '/passive' -RedirectStandardOutput 'c:\Windows\System32' -Wait ; Remove-Item c:\vc_redist.x86.exe -Force
CMD C:/bin/Program.exe
您可以使用ENTRYPOINT设置主命令,并使用CMD设置默认选项,以遵循最佳习惯
ENTRYPOINT ["command"]
CMD ["param","param"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。