web-dev-qa-db-ja.com

Docker + Node.js + Windows

欲しいもの: Node.js Webアプリをドッキングする(私はWindowsを使用しています)

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" ]
7
Emilien

私は元の質問がかなり古いことを知っていますが、昨日同様の問題があり、1か所で良い解決策が見つからなかったので、これを解決する私の経験を共有することにしました。

したがって、WindowsベースのDockerコンテナーをWindowsで実行し、内部でNode.JSを使用するとします。

次のオプションがあります。

  1. Windowsでも実行できるLinuxベースのDockerコンテナーに切り替えます。 Dockerファイルの最初の行は次のようになります。

    FROM node:latest

Linuxベースのコンテナーへの移行が選択肢ではないと仮定してみましょう。これにはいくつかの理由がある可能性があります(たとえば、私の場合AngularアプリをLinuxベースのDockerコンテナーでWindows 10上のローカルAzure Service Fabricクラスターにデプロイしようとしましたが、Windowsをサポートしています-ベースの画像のみ)。

この場合、Windowsベースのコンテナーに移動する必要があり、さらに2つのオプションがあります。

  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 app(RUN npm install)とinstall Angular CLI(RUN npm install -g @angular/cli@latest)コンテナ(...ng serve...)でAngular=)を実行できるようにします。

バージョン12.4.0(現時点では最新の安定版)のNode.JSをダウンロードしているので、別のバージョンを使用することもできます。

私はこれが十分に明確であり、誰かがこれが役に立つと思うことを願っています。

11
Witcher

Node:8を使用してWindows 10でDockerfileをビルドするときに同じ問題が発生しました。ここでカスタムノードイメージに変更しました: https://hub.docker.com/r/stefanscherer/node-windows/

または、公式のものを使用したい場合は、Linuxコンテナーに切り替えてみてください。

2
Kush Grover

次のように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/
1
Troy