Запустить программу VB.NET приложение с контейнером docker (Windows)

#.net #vb.net #visual-studio #docker #containers

Вопрос:

Я действительно новичок в контейнере Docker и технологиях .net. Я постараюсь объяснить свой вопрос как можно лучше.

Сценарий: Я хочу запускать приложения, разработанные в vb.net использование контейнера docker. Я начинаю медленно, когда тестирую различные варианты использования. Сначала я написал очень простое приложение «Привет, мир», используя visual studio 2015, как показано ниже. Тип приложения — «Консольное приложение», а целевая платформа-.Net Framework 4.6.2.

 Module Module1

    Sub Main()
        Console.WriteLine("hello world")

    End Sub

End Module
 

Я написал файл dockerfile, и он выглядит следующим образом.

 FROM mcr.microsoft.com/dotnet/framework/runtime:4.6.2
WORKDIR /app
COPY bin/Release .
ENTRYPOINT ["testVB.exe"]
 

Затем я вошел в каталог с помощью powershell и выполнил следующее.

 docker build -t testvb .     ---> build successful
docker run testvb
 

результаты ниже были такими, как и ожидалось:

 Hello World
 

До сих пор все было хорошо.
Теперь я хотел проверить свой следующий случай использования:

Сценарий: Скопируйте текстовый файл (test.txt) из одной папки в другую.

Вот как это выглядит в VB.net ,, Visual studio 2015,, тип—>Консольное приложение , целевая платформа —>> .net framework 4.6.2

 Module Module1

    Sub Main()
        My.Computer.FileSystem.CopyFile(
         "D:UsersDockerProjectsvbconsolevbconsoleTestFoldertest.txt",
         "D:UsersDockerProjectsvbconsolevbconsoleTestFolderSubDirtest.txt", overwrite:=True)
    End Sub

End Module
 

Когда я запускаю его с помощью visual studio, операция копирования работает нормально.
Затем я написал файл dockerfile, чтобы протестировать его с помощью docker run.
Файл Docker выглядит так, как показано ниже.

 From mcr.microsoft.com/dotnet/framework/runtime:4.6.2
WORKDIR /app
COPY bin/Release .
ENTRYPOINT ["vbconsole.exe"]
 

Затем с помощью powershell я выполнил следующие команды в каталог проекта.

 docker built -t vbconsole .   ---> build successfull 
docker run vbconsole 
 

результат оказался не таким, как ожидалось:

 Unhandled Exception: System.IO.FileNotFoundException: Could not find file 'D:UsersDockerProjectsvbconsolevbconsoleTestFoldertest.txt'.
   at Microsoft.VisualBasic.FileIO.FileSystem.CopyOrMoveFile(CopyOrMove operation, String sourceFileName, String destinationFileName, Boolean overwrite, UIOptionInternal showUI, UICancelOption onUserCancel)
   at vbconsole.Module1.Main() in D:UsersDockerProjectsvbconsolevbconsoleModule1.vb:line 4
 

Затем я понял, что мои локальные диски не монтируются во время процесса сборки, поэтому я выполнил следующую команду.

 docker run -it -v ${pwd}:c:app vbconsole
 

вывод по-прежнему был ошибкой:

docker: Error response from daemon: container f3c74e349f0d545deb42a6def3973eda9baed508274f156b44b04ae72f54f8df encountered an error during hcsshim::System::Start: failure in a Windows system call: The virtual machine or container exited unexpectedly. (0xc0370106) .

Именно здесь я в настоящее время застрял и нуждаюсь в некоторой помощи или руководстве, чтобы решить эту проблему. Я с нетерпением жду положительного ответа.

Заранее спасибо.

Комментарии:

1. ваша хост-машина Windows или linux? и вам лучше использовать относительный путь, когда это возможно. почему вы предполагаете, что в докере есть диск D?

2. @LeiYang моя хост-машина-windows, и на ней работают контейнеры Windows. Я не предполагаю, что в докере есть диск D. Привод D, о котором я упоминал выше, находится на моей локальной машине .

3. если у вас нет особых требований, я настоятельно рекомендую вам попробовать использовать .net core вместо .net 4.x .

4. @LeiYang У меня есть особые требования, потому что фактическое приложение, которое я хочу перенести позже после этих тестов, разработано в .net 4.6.2. Можете ли вы предложить мне что-нибудь для конкретной ошибки, о которой я упоминал выше?

5. я уже предлагал: относительный путь, .net core