ノードを含む単純なコンテナーを実行しようとすると、追加し.listen(port, log)
たログが取得されますが、ブラウザーでアクセスできません。
Dockerは初めてなので、何かが足りないかもしれません。
最初に実行docker build -t my-node-app .
してイメージを作成します。
それから私は走ります docker run -it --rm -name myapp -p 3000:80 my-node-app
次にサーバーが実行され、コールバックで追加したログが表示されます。 app.listen(port ,cb)
localhost:3000
でも開こうとすると何も出ません。
Dockerを使用せずに自分のマシンでローカルに実行すると、正常に動作します。
またdocker inspect myapp
、で見つけたIPアドレスを使用してURLにアクセスしようとしましたが、うまくいきませんでした。
Dockerfile:
FROM node:4-onbuild
EXPOSE 80
ノードindex.js:
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => {
console.log('hello')
res.send('it works!');
});
app.listen(PORT, () => {
console.log(`${process.env.NODE_ENV}server is running on port ${PORT} on ${process.platform}`);
});
-p
スイッチの構文は次のとおり$HOSTPORT:$CONTAINERPORT
です。
これを見ると、ホストポート3000をゲストポート80にマッピングしています。ただし、ノードサーバーは80をリッスンしていません。3000でリッスンしています。
次のいずれかを実行できます。
PORT
を使用して環境変数を80に設定します-e "PORT=80"
ENV
-p 3000:3000
適切なゲストポートを使用するように使用してくださいさらに、EXPOSE 80
Dockerfileを設定しましたが、まだ適切なポートを公開していません。サーバーコードによると、ノードはデフォルトで3000をリッスンします。
また、も使用しているため-p 123:456
、EXPOSE
設定を上書きできる可能性があります。参照:Dockerfileイメージのデフォルトのオーバーライド。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加