欲しいもの: Node.js Webアプリをドッキングする(私は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" ]
私は元の質問がかなり古いことを知っていますが、昨日同様の問題があり、1か所で良い解決策が見つからなかったので、これを解決する私の経験を共有することにしました。
したがって、WindowsベースのDockerコンテナーをWindowsで実行し、内部でNode.JSを使用するとします。
次のオプションがあります。
Windowsでも実行できるLinuxベースのDockerコンテナーに切り替えます。 Dockerファイルの最初の行は次のようになります。
FROM node:latest
Linuxベースのコンテナーへの移行が選択肢ではないと仮定してみましょう。これにはいくつかの理由がある可能性があります(たとえば、私の場合AngularアプリをLinuxベースのDockerコンテナーでWindows 10上のローカルAzure Service Fabricクラスターにデプロイしようとしましたが、Windowsをサポートしています-ベースの画像のみ)。
この場合、Windowsベースのコンテナーに移動する必要があり、さらに2つのオプションがあります。
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
このファイルの簡単な説明。 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をダウンロードしているので、別のバージョンを使用することもできます。
私はこれが十分に明確であり、誰かがこれが役に立つと思うことを願っています。
Node:8を使用してWindows 10でDockerfileをビルドするときに同じ問題が発生しました。ここでカスタムノードイメージに変更しました: https://hub.docker.com/r/stefanscherer/node-windows/
または、公式のものを使用したい場合は、Linuxコンテナーに切り替えてみてください。
次のように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/