web-dev-qa-db-ja.com

docker内でwebpack-dev-serverを実行できません

コンテナー内からwebpackを使用して単純な反応アプリを提供するDockerイメージを作成しましたが、ブラウザーには何も表示されません。

これが私の設定ファイルです

package.json

{
  "name": "invas_client",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack --inline --content-base ."
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "react": "^0.14.7",
    "react-dom": "^0.14.7",
    "react-router": "^2.0.0"
  },
  "devDependencies": {
    "babel-core": "^6.5.1",
    "babel-loader": "^6.2.2",
    "babel-preset-es2015": "^6.5.0",
    "babel-preset-react": "^6.5.0",
    "http-server": "^0.8.5",
    "webpack": "^1.12.13",
    "webpack-dev-server": "^1.14.1"
  }
}

webpack.config.js

module.exports = {
    entry: './index.js',

    output: {
        filename: 'bundle.js',
        publicPath: ''
    },

    module: {
        loaders: [
            { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader?presets[]=es2015&presets[]=react' }
        ]
    }
}

Dockerfile

# Use starter image
FROM node:argon

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install

# Bundle app source
COPY . /usr/src/app

# Expose port
EXPOSE 8080

# Default command to run
CMD ["npm", "start"]

正常に機能しているもの

npm startを実行すると、webpack-dev-serverは正常に実行されます。 http:// localhost:808 にアクセスすると、ページが表示されます。

機能していないもの

Dockerを使用してサーバーを実行すると、次のコマンドが実行されます。

docker build -t anubhav756/app . && docker run -p 80:8080 anubhav756/app

ログはコンテナ内からすべて正常に機能していることを示していますが、ブラウザに http:// localhost を指定すると、ERR_CONNECTION_RESETが表示されます

サンプルコードの終わりここ

15
Anubhav Dhawan

あなたは実際にはローカルホストでのみリッスンしています。外部からアクセスできるようにするには、package.jsonファイルの次の行を置き換えます。

"start": "webpack-dev-server --inline --content-base ."

沿って :

"start": "webpack-dev-server --Host 0.0.0.0 --inline --content-base ."

関連ディスカッション: https://github.com/webpack/webpack-dev-server/issues/147

41
Raphayol

コンテナー内でwebpack-dev-serverのホットリロードを有効にできない場合は、Raphayolの回答に何かを追加したいだけです。
プロジェクトフォルダーをコンテナーにマウントした後でも、webpackまたはwebpack-dev-server watch(--watch)モードを機能させることができませんでした。
これを修正するには、webpackがディレクトリ内のファイルの変更を検出する方法を理解する必要があります。
これは、inotifyおよびfseventと呼ばれるファイルの変更を監視するためのOSレベルのサポートを追加する2つのソフトウェアの1つを使用します。標準のDockerイメージには通常、これら(特にLinuxではinotify)がプリインストールされていないため、Dockerfileにインストールする必要があります。
ディストリビューションのパッケージマネージャーでinotify-toolsパッケージを探してインストールします。幸い、すべての高山、debian、centosがこれを持っています。

4
HosseinAgha