在docker中不能运行webpack-dev-server

我已经创build了一个docker镜像,它使用容器内的webpack提供一个简单的反应应用程序,但是我在浏览器中什么都没有得到。

这是我的configuration文件

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 startwebpack-dev-server正常运行,当我转到http:// localhost:8080时 ,我看到了我的页面。

什么不工作

当我使用docker运行我的服务器时,使用以下命令:

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

日志显示在容器内正常工作,但是当我将浏览器指向http:// localhost时 ,我得到了ERR_CONNECTION_RESET

示例代码在这里

你真的只在本地主机上侦听。 要从外部访问,请在package.json文件中replace以下行:

 "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

我只是想添加一些Raphayol答案,如果你不能启用容器内的webpack-dev-server的热重装。
即使在将我的项目文件夹放入容器后,我也无法使webpack或webpack-dev-server watch(–watch)模式正常工作。
要解决这个问题,您需要了解webpack如何检测目录中的文件更改。
它使用两个软件之一,添加操作系统级别的支持,以观察文件更改称为inotify和fsevent。 标准Docker镜像通常没有预装这些(特别是inotify for linux),所以你必须把它安装在你的Dockerfile中。
在发行版的软件包pipe理器中查找inotify-tools软件包并进行安装。 好在所有的高山,debian,centos都有这个。