2 votes

Microsoft nanoserver ne peut pas exécuter les fichiers exe

J'ai un conteneur nanoserver en cours d'exécution. Je me connecte au conteneur en utilisant

> docker run -it microsoft/nanoserver powershell

À l'intérieur, je crée un simple executable hello world en utilisant la commande suivante :

PS C:\> Add-Type -outputtype consoleapplication -outputassembly helloworld.exe 'public class helloworld{public static void Main(){System.Console.WriteLine("hello world");}}'

Lorsque j'exécute helloworld.exe, il n'y a pas de sortie sur stdout. Aucun fichier journal d'erreur n'est généré. Comment puis-je corriger cela? Pourquoi helloworld.exe ne renvoie-t-il pas la sortie ou les erreurs sur stdout? Comment puis-je corriger cela?

PS C:\> ls

    Répertoire : C:\

Mode                Dernière écriture     Longueur Name
----                -------------         ------ ----
d-----        24/08/2017  11:08                Program Files
d-----        16/07/2016   17:39                Program Files (x86)
d-r---        08/08/2017   03:11                Users
d-----        24/08/2017  11:08                Windows
-a----        24/08/2017  11:09           2048 helloworld.exe
-a----        20/11/2016   17:02           1894 License.txt

PS C:\> .\helloworld.exe
PS C:\> echo %ERRORLEVEL%
%ERRORLEVEL%

0voto

slampe Points 1

La raison pour laquelle aucune sortie n'est générée sur la console est que votre exécutable est en x86 et pas en x64. Nanoserver ne supporte que le x64 selon ce lien : https://www.ca.com/en/blog-developers/docker-containers-os-base-image.html

J'ai rencontré un problème similaire lorsque j'ai copié un exécutable simple hello world construit en ligne de commande avec cl.exe. Après avoir vérifié si l'exécutable était en 32 ou 64 bits en utilisant dumpbin, j'ai reconstruit l'exécutable depuis l'invite de commandes MS VS correcte, c'est-à-dire celle avec l'ensemble d'outils et les paramètres x64 natifs. Cette fois, j'ai pu voir la sortie de la console de l'application dans le conteneur nanoserver docker.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X