无法在docker中运行webpack-dev-server

时间:2016-09-22 06:45:13

标签: docker webpack webpack-dev-server

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

以下是我的配置文件

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:8080时,我会看到我的页面。

什么不起作用

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

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

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

示例代码超过 here

3 个答案:

答案 0 :(得分:38)

您实际上只在localhost上侦听。 要从外部访问,请替换package.json文件中的以下行:

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

by:

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

相关讨论:https://github.com/webpack/webpack-dev-server/issues/147

答案 1 :(得分:4)

如果您无法在容器内部重新加载webpack-dev-server,我只想向Raphayol回答一些问题。
即使将我的项目文件夹安装到容器中,我也无法使webpack或webpack-dev-server监视(--watch)模式工作。
要解决此问题,您需要了解webpack如何检测目录中的文件更改 它使用2个软件中的一个来添加操作系统级别支持,用于监视名为inotify和fsevent的文件更改。标准Docker镜像通常没有预先安装这些(特别是inotify for linux),所以你必须将它安装在你的Dockerfile中。
在发行版的软件包管理器中查找inotify-tools软件包并进行安装。幸运的是,所有高山,debian,centos都有这个。

答案 2 :(得分:0)

将webpack-dev-server与Encore一起使用并通过Docker进行公开时,您需要使用--host 0.0.0.0 --public localhost:8080,以便将文件甚至可以在浏览器not navigating to 0.0.0.0 adresses上投放。

这是我用的:

webpack-dev-server --hot --host=0.0.0.0 --public=localhost:8080