我想要的:dockerize一个Node.js网络应用程序(我在Windows上)
docker-compose up
给我这个错误:
Service 'webapp' failed to build: no matching manifest for windows/amd64 in the manifest list entries
据我所知,这是因为Windows没有Node.js映像,修复方法是切换到Linux容器。
当我尝试切换到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" ]
我知道最初的问题已经很久了,但由于我在前几天遇到了类似的问题而无法在一个地方找到好的解决方案,所以我决定分享我解决这个问题的经验。
所以,我们假设你想在Windows上运行基于Windows的Docker容器并在里面使用Node.JS。
您有以下选项:
FROM node:latest
让我们假设迁移到基于Linux的容器不适合您。可能有几个原因(例如,在我的情况下,我尝试将基于Linux的Docker容器中的Angular应用程序部署到Windows 10上的本地Azure Service Fabric群集,但它仅支持基于Windows的映像)。
在这种情况下,您必须移动到基于Windows的容器,还有两个选项。
以下是安装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(目前最新的稳定版),您可能想要使用不同的版本。
我希望这很清楚,有人会觉得这很有用。
在使用node:8的Windows 10上构建Dockerfile时遇到了同样的问题。我在这里改为自定义节点图像:https://hub.docker.com/r/stefanscherer/node-windows/
或者如果您更喜欢使用官方版,请尝试切换到Linux容器。