Docker + Node.js + Windows

问题描述 投票:1回答:1

我想要的:dockerize一个Node.js网络应用程序(我在Windows上)

Windows container

docker-compose up给我这个错误:

Service 'webapp' failed to build: no matching manifest for windows/amd64 in the manifest list entries

据我所知,这是因为Windows没有Node.js映像,修复方法是切换到Linux容器。

Not enough memory

当我尝试切换到Linux容器时,Docker告诉我,我没有足够的内存。通过设置更改分配的内存量无法解决问题。

编辑:文件

docker-compose

version: '3'

services:
  webapp:
    build: ./Front
    volumes:
      - ./Front:./dockerized
    ports:
     - 5001:8080

Dockerfile

FROM node:alpine

RUN mkdir -p ../dockerized

WORKDIR ../dockerized

COPY package*.json ../dockerized

RUN npm install

COPY . ../dockerized

EXPOSE 8080
CMD [ "npm", "start" ]
node.js windows docker linux-containers
1个回答
2
投票

我知道最初的问题已经很久了,但由于我在前几天遇到了类似的问题而无法在一个地方找到好的解决方案,所以我决定分享我解决这个问题的经验。

所以,我们假设你想在Windows上运行基于Windows的Docker容器并在里面使用Node.JS。

您有以下选项:

  1. 切换到基于Linux的Docker容器,该容器也可以在Windows中运行。第一行docker文件可能如下所示: FROM node:latest

让我们假设迁移到基于Linux的容器不适合您。可能有几个原因(例如,在我的情况下,我尝试将基于Linux的Docker容器中的Angular应用程序部署到Windows 10上的本地Azure Service Fabric群集,但它仅支持基于Windows的映像)。

在这种情况下,您必须移动到基于Windows的容器,还有两个选项。

  1. 使用已安装Node.JS的任何基于Windows的自定义Docker镜像(Kush Grover提出的选项)
  2. 创建自己的基于Windows的Docker镜像并在其中安装Node.JS。最后一个选项是我最终提出的,因为我不想依赖一些非官方的公共自定义图像。

以下是安装Node.JS的基于Windows的Docker文件的示例:

FROM mcr.microsoft.com/windows/servercore:1803 as installer

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';$ProgressPreference='silentlyContinue';"]

RUN Invoke-WebRequest -OutFile nodejs.zip -UseBasicParsing "https://nodejs.org/dist/v12.4.0/node-v12.4.0-win-x64.zip"; `
Expand-Archive nodejs.zip -DestinationPath C:\; `
Rename-Item "C:\\node-v12.4.0-win-x64" c:\nodejs

FROM mcr.microsoft.com/windows/nanoserver:1803

WORKDIR C:\nodejs
COPY --from=installer C:\nodejs\ .
RUN SETX PATH C:\nodejs
RUN npm config set registry https://registry.npmjs.org/

WORKDIR /app

# install and cache app dependencies
COPY src/WebSpa/package.json /app/src/WebSpa/package.json

WORKDIR /app/src/WebSpa
RUN npm install
RUN npm install -g @angular/cli@latest

# add app
COPY . /app

# start app
CMD cd /app/src/WebSpa && ng serve --host 0.0.0.0

这个文件的简短说明。我使用基于Windows的官方图像(FROM ...servercore:1803...)然后下载Node.JS二进制文件(RUN Invoke-WebRequest...)并向注册表添加一些必需的东西(RUN npm config set registry...)。稍后我使用Node.JS NPM命令为我的Angular应用程序(RUN npm install)安装所需的包,并安装Angular CLI(RUN npm install -g @angular/cli@latest)以便能够在容器上运行Angular(...ng serve...)。

请注意,我下载的是版本12.4.0的Node.JS(目前最新的稳定版),您可能想要使用不同的版本。

我希望这很清楚,有人会觉得这很有用。


2
投票

在使用node:8的Windows 10上构建Dockerfile时遇到了同样的问题。我在这里改为自定义节点图像:https://hub.docker.com/r/stefanscherer/node-windows/

或者如果您更喜欢使用官方版,请尝试切换到Linux容器。

© www.soinside.com 2019 - 2024. All rights reserved.