Git не работает в NanoServer (в Docker) - PullRequest
1 голос
/ 02 апреля 2020

Мне нужно установить Git в Nano Server. Во время моего исследования я обнаружил, что Nano Server не может работать с файлами MSI, и поэтому я подумал, что могу легко загрузить его в другой контейнер (Windows Server Core в моей ситуации) и переместить содержимое Git в другой контейнер (контейнер Nano Server) (идея отсюда: https://stefanscherer.github.io/how-to-build-nodejs-nanoserver-image/). Я попытался использовать следующий dockerfile:

FROM mcr.microsoft.com/windows/servercore:ltsc2019
RUN powershell Invoke-WebRequest -outfile gitsetup.exe https://github.com/git-for-windows/git/releases/download/v2.7.0.windows.1/Git-2.7.0-64-bit.exe

RUN setx /M Path "%Path%;c:\git\cmd;c:\git\bin;c:\git\usr\bin"

RUN powershell -command start-process .\gitsetup.exe -ArgumentList '/VERYSILENT /SUPPRESSMSGBOXES /CLOSEAPPLICATIONS /DIR=c:\git' -Wait

FROM mcr.microsoft.com/dotnet/core/sdk:3.1.101-nanoserver-1909

USER ContainerAdministrator
RUN setx /M Path "%Path%;c:\git\cmd;c:\git\bin;c:\git\usr\bin"
COPY --from=0 "c:\git\cmd" "c:\git\cmd"
COPY --from=0 "c:\git\bin" "c:\git\bin"
COPY --from=0 "c:\git\usr\bin" "c:\git\usr\bin"
USER ContainerUser
RUN git version

Но когда я пытаюсь построить образ, я получаю следующую ошибку после некоторого зависания Step 12/14 : RUN git version:

команда 'cmd / S / C git версия' вернула ненулевой код: 3221225495 Ошибка шины

Я подумал, что все просто, я просто удалю RUN git version из dockerfile и запустите команду непосредственно в контейнере после того, как образ был успешно собран, чтобы я мог проверить, что является фактической ошибкой. Но когда я вызываю git в прикрепленном контейнере, он просто зависает на несколько секунд и ничего не делает (как будто я не набирал команду). Любые идеи?

PS: я не хочу, чтобы Min Git (хотя Min Git по какой-то причине работает в Nano Server), потому что я использую NPM, который порождает команды git (для загрузите указанный c коммит из GitHub), которого нет в Min Git.

PS2: я не могу изменить свой основной контейнер на Windows Server Core, так как я использую его с. NET Ядро и Windows Контейнеры. SDK доступен только для сборки Nano Server.

Редактировать: Я попытался ответить @ Vo c, и он работает. Для тех, кто хочет получить точный код dockerfile:

FROM mcr.microsoft.com/windows/servercore:ltsc2019

RUN setx /M Path "c:\git\cmd;c:\git\bin;c:\git\usr\bin;%Path%;c:\gcc\bin;c:\7zip"

RUN powershell -command Invoke-WebRequest -outfile portableGit.7z.exe https://github.com/git-for-windows/git/releases/download/v2.26.0.windows.1/PortableGit-2.26.0-64-bit.7z.exe
RUN powershell -command Invoke-WebRequest -UserAgent 'DockerCI' -outfile 7zsetup.exe http://www.7-zip.org/a/7z1514-x64.exe
RUN powershell -command start-process .\7zsetup.exe -ArgumentList '/S /D=c:/7zip' -Wait

RUN powershell 7z x portableGit.7z.exe -ogit

FROM mcr.microsoft.com/dotnet/core/sdk:3.1.101-nanoserver-1909

USER ContainerAdministrator
RUN setx /M Path "C:\git\bin;C:\git\usr\bin;C:\git\mingw64\bin;C:\nodejs;%Path%"
COPY --from=0 "c:\git" "c:\git"
RUN git version

1 Ответ

0 голосов
/ 03 апреля 2020

Во-первых, вам не нужно запускать настройку GIt для Windows.

Вы также можете попробовать и распаковать портативный извлекаемый архив PortableGit-2.26.0-64-bit.7z.exe в любом месте, где хотите. на изображении, а затем добавьте к пути:

set GH=C:\path\to\git
set PATH=%GH%\bin;%GH%\usr\bin;%GH%\mingw64\bin;%PATH%
...