Ошибка при создании Dockerfile на основе ядра сервера Windows (npm не распознается) - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь развернуть свой внутренний сервер с node.js на Windows Server 2016, используя docker.

Я решил использовать образ windowsservercore: последний с iisnode используя Dockerfile из этой ссылки с некоторыми изменениями

    # Pull Microsoft/windowsservercore image from Docker's repository
    FROM microsoft/windowsservercore:latest

    LABEL maintainer.name="myName" \
    maintainer.email="myEmail" \
    version="1.0.0" \
    vendor="myVendor" \
    com.myApp.version="1" \
    com.myApp.release-date="2018-12-1" \
    com.myApp.version.is-production="yes" \
    description="app services" 

    WORKDIR /inetpub/wwwroot

    # Copy all web-application's files into our own nodejs-core image being created
    COPY . .
    # COPY node_modules/webworker-threads \
    # C:/Users/Administrator/AppData/Roaming/npm/node_modules/webworker-threads
    COPY package*.json ./

    # Add Microsoft IIS 10 web-server role to Windows Server Core 2016 image
    RUN powershell Add-WindowsFeature Web-Asp-Net45,Web-Http-Tracing,Web-Scripting-Tools,Web-WebSockets;

    ARG NODE_VERSION=10.14.1
    # Download and pre-install all IIS 10 components required to run Node.js applications
    ADD https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-x64.msi node-v${NODE_VERSION}-x64.msi
    RUN powershell Start-Process msiexec -ArgumentList '/i node-v${NODE_VERSION}-x64.msi /qn /l*v nodejs.log' -Wait ;

    ADD http://go.microsoft.com/fwlink/?LinkID=615137 rewrite_amd64.msi
    RUN powershell Start-Process msiexec -ArgumentList '/i rewrite_amd64.msi /qn /l*v rewrite.log' -Wait ;

    ADD https://github.com/tjanczuk/iisnode/releases/download/v0.2.21/iisnode-full-v0.2.21-x64.msi iisnode-full-v0.2.21-x64.msi
    RUN powershell Start-Process msiexec -ArgumentList '/i iisnode-full-v0.2.21-x64.msi /qn /l*v iisnode.log' -Wait ;

    # Install all Node.js modules required to run the web-application
    #RUN powershell npm install --global --production  npm
    RUN powershell npm install --global --production  node-gyp
    RUN powershell npm --vcc-build-tools-parameters='[""--allWorkloads""]' install --global --production windows-build-tools

    # Set the environment variables required by specific Node.js modules to function properly
    ENV PATH 'C:\users\Administrator\.windows-build-tools\Python27; \
    C:\Program Files(x86)\MSBuild\14.0\bin\;C:\Windows\system32;C:\Windows; \
    C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\; \
    C:\ProgramFiles\nodejs\;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps; \
    C:\Users\Administrator\AppData\Roaming\npm;' 
    ENV PYTHON '%USERPROFILE%\.windows-build-tools\Python27\python.exe'
    ENV PYTHONPATH '%USERPROFILE%\.windows-build-tools\python27'
    ENV VCTargetsPath "C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\v140"
    ENV NODE_PATH "C:\Users\Administrator\AppData\Roaming\npm\node_modules"

    # Node.js modules required by the web-application to run
    RUN powershell npm install --production

    # Expose a TCP-port listened by the web-application
    EXPOSE 8080

    # Provide a specific entry point for the web-application to run
    ENTRYPOINT node.exe ./main.js

Когда я начинаю сборку: он прогрессирует до строки:

RUN powershell npm install --global --production node-gyp

, поскольку npm нераспознал

, хотя я установил node.js на шаге раньше.

Я пытался использовать:

    RUN powershell cd "C:\Program Files\nodejs"; npm install --global --production  node-gyp

и

    RUN powershell cd "C:\Program Files\nodejs\npm" install --global --production  node-gyp

и оба дают одинаковую ошибку.

...