Linuxコンテナーを実行するWindows用のdockerを備えたVisual Studio 2019でdocker-composeを使用しています。 angularクライアントアプリのホットリロードを有効にしたい。
アプリを実行するnpmコマンドを変更して、次のようなポーリングを含めました。
"docker-start": "ng serve --Host 0.0.0.0 --port 4200 --proxy-config proxy-conf.json --poll 1"
そしてボリュームをdocker-composeに追加しました:
volumes:
- ./ClientApp:/app/
さらにwebpackポートを公開する
ports:
- 4200:4200
- 49153:49153
docker-composeファイルはリポジトリのルートにあり、angular appは/ ClientAppフォルダーにあります。これにより、localhost:4200に移動するたびにアプリケーションがGET \をスローできなくなります。ボリュームマッピングをコメントアウトすると、アプリケーションは動作しますが、リロードは機能しません。フロントエンドコードを変更するたびに、コードの変更をリッスンし、必要に応じてコンテナーを更新します。
Dockerfile全体:
FROM node:9.6.1
RUN mkdir -p /app
WORKDIR /app
EXPOSE 4200
EXPOSE 49153
ENV PATH /app/node_modules/.bin:$PATH
COPY . /app
RUN npm install --silent
RUN npm rebuild node-sass
CMD ["npm", "run", "docker-start"]
DockerとWindowsは残念ながらうまくいっていないため、ここでいくつかの問題に直面している可能性があります。
cannot GET\
エラーは間違いなく奇妙で、発生してはなりません。最初に、ボリュームが正しくマウントされ、コンテナの実行後にすべてのデータがそこにあることを確認する必要があります。
コンテナー内の作業ディレクトリーが空の場合(そうである可能性があります)、必要なドライブが正しく共有されているかどうか、Dockerの設定を確認してみてください。
表示されているにもかかわらずデータが表示されない場合は、資格情報をリセットする必要があります。これを行うには、Windowsパスワードをdockerに提供する必要があります。
悪いニュース
Docker Docs によると、Windows上のDockerでは、inotify
イベント(マウントされたボリュームの変更を検出するために使用される)がまだ機能していないようです。その問題を回避する方法について、彼らの推奨事項に従うことをお勧めします。
良いニュース
幸い、 Go-Touch など、問題を解決しようとする多くのプロジェクトがあります。私自身はそのことを確認していませんが、あなたがそれらから利益を得られることを願っています。
コードが変更されたときにnodemonを使用してノードサーバーを自動的に再起動します。その前にdockerイメージにnodemonをインストールし、それが存在することを確認してください。
Nodemonをインストールするには、このURLを参照してください: https://www.npmjs.com/package/nodemon
次に、DockerfileでCMDを変更します
CMD ["nodemon", "--exec", "npm", "run", "docker-start"]
これは、コードが変更されるたびにnodejsアプリケーションをリロードします