web-dev-qa-db-ja.com

ngサーバーがDockerコンテナーで機能しない

私はこれを持っています Docker Compose configuration NodeJSコンテナを作成し、Angular CLIを内部にインストールします。

docker-compose up -dの後、docker-compose run node bashを使用してコンテナー内でSSHを実行できます。 ng newは完全に機能しますが、ng serveは機能しないようです。正しく起動され、コンソールにエラーはありません。しかし、localhost(ポート4200を80にマップした広告)にアクセスすると、何もロードされません。

何か不足していますか?

13
Axiol

Dockerfileには、次のような Expose 行がありません。

EXPOSE 4200

Dockerファイルの最後のRUNコマンドの前に配置してみてください。

この行は、コンテナー自体のポート(この場合は4200)を公開するため、composeからのマッピングは機能します(80:4200)。

Composeはこれを行うだけです。ホストから80をコンテナ内の4200に転送します。ただし、4200が実際にリッスンされているかどうかはわかりません。 dockerfileのExposeは、将来の実行中のコンテナー用にこのポートを公開するために、イメージがビルドされるときに、ngサーバーがリッスンできるようにします。


解像度

したがって、docker-compose runで必要なものを取得するには、publishを使用してポートを公開します。 rundocker-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のようなものではなく->のようなものが表示される場合、マッピングまたはポートが公開されていないことを意味します。

27
Juan

実行してみてください ng serve ホストを指定した状態(デフォルトでは「localhost」に設定されています):

ng serve -H 0.0.0.0

[〜#〜] update [〜#〜]注意してください、慎重に(@ angular/cli @ 7)オプションは --Host

ng serve --Host 0.0.0.0
15
Andriy

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でリッスンしています

したがって、要約すると:

  1. あなたしない DockerfileのEXPOSE 4200行が必要
  2. you do docker-compose.ymlファイルにポートマッピングが必要です
  3. you do DockerfileにCMD行が必要です。また、Hostパラメーターを含める必要があります。 CMD ["ng","serve","--Host", "0.0.0.0"]
  4. あなたしないdocker runを使用する必要があります
  5. you can use docker-compose up、これはdocker-compose.ymlファイルからポートマッピングを取得します。
7
SamRR_75
ng serve -H 0.0.0.0 

angular-cli.jsonに1000のポーリングプロパティがある(ファイル変更検出用)

"defaults": {
    "styleExt": "scss",
    "component": {},
    "poll": 1000
  }
0
Carlos Bastos

あなたがやっていることは、単に角度をインストールすることです、あなたはCMD ["npm start"] or CMD ["ng serve"] dockerfileの最後にあるのは、コンテナを開始するときにdockerが実行するコンテナのエントリポイントであり、npmサーバーが起動するだけです。

ng serve -H 0.0.0.0 --port <yourportnumber>は、ngserveをlocalhost:<yourportnumber>コンテナポート番号をローカルポートにバインドできたら

0
Vignajeth