私はこれを持っています Docker Compose configuration NodeJSコンテナを作成し、Angular CLIを内部にインストールします。
docker-compose up -d
の後、docker-compose run node bash
を使用してコンテナー内でSSHを実行できます。 ng new
は完全に機能しますが、ng serve
は機能しないようです。正しく起動され、コンソールにエラーはありません。しかし、localhost
(ポート4200を80にマップした広告)にアクセスすると、何もロードされません。
何か不足していますか?
Dockerfileには、次のような Expose 行がありません。
EXPOSE 4200
Dockerファイルの最後のRUNコマンドの前に配置してみてください。
この行は、コンテナー自体のポート(この場合は4200)を公開するため、composeからのマッピングは機能します(80:4200)。
Composeはこれを行うだけです。ホストから80をコンテナ内の4200に転送します。ただし、4200が実際にリッスンされているかどうかはわかりません。 dockerfileのExposeは、将来の実行中のコンテナー用にこのポートを公開するために、イメージがビルドされるときに、ngサーバーがリッスンできるようにします。
解像度
したがって、docker-compose run
で必要なものを取得するには、publish
を使用してポートを公開します。 run
はdocker-compose.yml
のマッピングを使用しないため、それらを無視します。次のように使用します。
docker-compose run --publish 80:4200 node bash
次に、angularアプリを作成し、実行中に起動します。
今後の参考のためのテスト例
cd tmp
(または書き込み可能なフォルダー)
ng new myProject
cd myProject
ng serve --Host 0.0.0.0
(-ホスト0.0.0.0からコンテナーからすべてのインターフェイスをリッスンします)
次に、ブラウザでlocalhost
に移動します。ポート4200
が公開され、publishコマンドを使用してホストポート80
にバインドされると、angular Welcomeページが表示されます。上に示した。
ポート転送の問題が発生するたびに、元のrun command
を実行した他の端末を保持したまま新しい端末を開き、docker ps
を実行すると、ポート列に次のように表示されます。
0.0.0.0:80->4200/tcp
は、ポート80のホストがポート4200のコンテナーに正常に転送していることを意味します。
4200/tcp
のようなものではなく->
のようなものが表示される場合、マッピングまたはポートが公開されていないことを意味します。
ng serve --Host 0.0.0.0
を使用することは常に私にとってはうまくいきました。
これが重要である理由は、それなしでは、angularプロセスはコンテナー内のローカルホストインターフェースでのみリッスンしているためです -したがって、Dockerポートマッピングを使用しても、コンテナの外部からの接続は受信されません。
** Angular Live Development Serverはlocalhost:3000でリッスンしています
ただし、パラメータ--Host 0.0.0.0
を追加すると、angularプロセスはすべてのインターフェイスでリッスンし、Dockerポートマッピングによりコンテナ外部からの接続が許可されます。
** Angular Live Development Serverは0.0.0.0:3000でリッスンしています
したがって、要約すると:
EXPOSE 4200
行が必要CMD ["ng","serve","--Host", "0.0.0.0"]
docker run
を使用する必要がありますdocker-compose up
、これはdocker-compose.ymlファイルからポートマッピングを取得します。ng serve -H 0.0.0.0
angular-cli.jsonに1000のポーリングプロパティがある(ファイル変更検出用)
"defaults": {
"styleExt": "scss",
"component": {},
"poll": 1000
}
あなたがやっていることは、単に角度をインストールすることです、あなたはCMD ["npm start"] or CMD ["ng serve"]
dockerfileの最後にあるのは、コンテナを開始するときにdockerが実行するコンテナのエントリポイントであり、npmサーバーが起動するだけです。
ng serve -H 0.0.0.0 --port <yourportnumber>
は、ngserveをlocalhost:<yourportnumber>
コンテナポート番号をローカルポートにバインドできたら