Emi*_*ien 2 windows node.js docker linux-containers
我想要的是: dockerize一个Node.js Web应用程序(我在Windows上)
docker-compose up 让我这个错误:
Service 'webapp' failed to build: no matching manifest for windows/amd64 in the manifest list entries
Run Code Online (Sandbox Code Playgroud)
据我了解,这是因为Windows没有Node.js映像,而解决方法是切换到Linux容器。
当我尝试切换到linux容器时,Docker告诉我我没有足够的内存。通过设置更改分配的内存量不会解决该问题。
编辑:文件
docker-compose
version: '3'
services:
webapp:
build: ./Front
volumes:
- ./Front:./dockerized
ports:
- 5001:8080
Run Code Online (Sandbox Code Playgroud)
Dockerfile:
FROM node:alpine
RUN mkdir -p ../dockerized
WORKDIR ../dockerized
COPY package*.json ../dockerized
RUN npm install
COPY . ../dockerized
EXPOSE 8080
CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)
我知道原来的问题已经很老了,但是由于我最近几天遇到过类似的问题,并且无法在一个地方找到好的解决方案,所以我决定分享我在解决这个问题上的经验。
因此,假设您要在Windows上运行基于Windows的Docker容器并在其中使用Node.JS。
您可以使用以下选项:
切换到基于Linux的Docker容器,该容器也可以在Windows中运行。docker文件的第一行可能如下所示:
FROM node:latest
让我们假设迁移到基于Linux的容器不是您的选择。可能有多种原因(例如,在我的情况下,我尝试将基于Linux的Docker容器中的Angular应用程序部署到Windows 10上的本地Azure Service Fabric群集,但仅支持基于Windows的映像)。
在这种情况下,您必须转到基于Windows的容器,并且还有两个选择。
使用已安装Node.JS的任何基于Windows的自定义Docker映像(Kush Grover建议的选项)
创建您自己的基于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
Run Code Online (Sandbox Code Playgroud)
此文件的简短说明。我使用基于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(目前有最新稳定版本),您可能要使用其他版本。
我希望这已经足够清楚,并且有人会发现它很有用。
小智 5
我能够通过如下更改 Dockerfile 来成功部署和运行它...
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/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6171 次 |
| 最近记录: |