Сборка Docker не удалась: не удалось установить переменные среды - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь собрать приложение QT, используя Docker.У меня есть инструменты сборки Visual Studio 2015 и QT 5.11.2 в качестве базового образа докера.Когда я пытаюсь собрать приложение QT в Docker, я получаю эту ошибку.

C: \ Qt \ 5.11.2 \ msvc2015_64 \ include \ QtCore / qglobal.h (45): фатальная ошибка C1083: невозможнооткрыть включаемый файл: 'type_traits': такого файла или каталога нет

Когда я проверял наличие этого файла 'type_traits', внутри докера он существует внутри этого пути:

C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ include

Сбой сборки Docker на этом шаге:

RUN C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe

Эта команда RUN ["C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat", "x86_amd64"] устанавливаетПеременные окружения, Как проверить, что они все еще существуют для остальных команд RUN в dockerfile?

Ниже приведен мой файл docker:

#My base docker image containing QT5.11.2 and Visual build tools 2015    
FROM qt 

COPY ["./", "C:/app"]

RUN $env:PATH ='C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin;' + $env:PATH;\
    [Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine);

RUN $env:PATH ='C:\Qt\5.11.2\msvc2015_64\bin;' + $env:PATH;\
   [Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine);

RUN $env:PATH ='C:\Qt\Tools\QtCreator\bin\jom.exe;' + $env:PATH;\
   [Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine);

RUN $env:PATH ='C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include;' + $env:PATH;\
    [Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine);

WORKDIR C:\\app
RUN ["C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat", "x86_amd64"]

RUN qmake app.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"  
RUN C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe qmake_all 
RUN C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe    
RUN C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe install
RUN mkdir dist\debug_build\app_dist  
RUN xcopy app_dist\dist_redist\*.* dist\debug_build\app_dist /E /Y >NUL

CMD cmd

1 Ответ

0 голосов
/ 12 октября 2018

Как проверить, что они все еще существуют для остальных команд RUN в dockerfile?

Они не будут.

В среде, которая существует here

RUN ["C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat", "x86_amd64"]

выполняет процесс, который выполняет командный файл с аргументом x86_amd64, создавая новые параметры среды для любых дочерних процессов, которых нет, затемвыходы.Затем:

RUN qmake app.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"

выполняет другой процесс в среде, которая существовала там , которая все еще является средой.И так далее.

В этом поведении нет ничего специфического для Docker или Windows.В любой операционной системе процесс не может изменять среду своего родителя, только копию той среды, которую он наследует и передает любым дочерним процессам.

Если вам нужны все команды:

qmake app.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"
C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe qmake_all
C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe
C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe install

для запуска в среде, измененной vcvarsall.bat x86_amd64, затем вы запустили их все в той же оболочке, что и эта команда, например,

RUN "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat" x86_amd64 && ^
    qmake app.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"  && \
    C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe qmake_all && \
    C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe && \
    C:\\Qt\\Tools\\QtCreator\\bin\\jom.exe install

См. Также файл docker ENVкоманда для настройки глобальных параметров среды в док-контейнере.

...