web-dev-qa-db-ja.com

変更をリッスンし、コードの変更時にコンテナーをリロードします-docker-compose

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"]
10
qubits

DockerとWindowsは残念ながらうまくいっていないため、ここでいくつかの問題に直面している可能性があります。

cannot GET\エラーは間違いなく奇妙で、発生してはなりません。最初に、ボリュームが正しくマウントされ、コンテナの実行後にすべてのデータがそこにあることを確認する必要があります。

コンテナー内の作業ディレクトリーが空の場合(そうである可能性があります)、必要なドライブが正しく共有されているかどうか、Dockerの設定を確認してみてください。

表示されているにもかかわらずデータが表示されない場合は、資格情報をリセットする必要があります。これを行うには、Windowsパスワードをdockerに提供する必要があります。

Docker Settings

悪いニュース

Docker Docs によると、Windows上のDockerでは、inotifyイベント(マウントされたボリュームの変更を検出するために使用される)がまだ機能していないようです。その問題を回避する方法について、彼らの推奨事項に従うことをお勧めします。

良いニュース

幸い、 Go-Touch など、問題を解決しようとする多くのプロジェクトがあります。私自身はそのことを確認していませんが、あなたがそれらから利益を得られることを願っています。

1
tcpgibbon

コードが変更されたときにnodemonを使用してノードサーバーを自動的に再起動します。その前にdockerイメージにnodemonをインストールし、それが存在することを確認してください。

Nodemonをインストールするには、このURLを参照してください: https://www.npmjs.com/package/nodemon

次に、DockerfileでCMDを変更します

CMD ["nodemon", "--exec", "npm", "run", "docker-start"]

これは、コードが変更されるたびにnodejsアプリケーションをリロードします

1
Prem