Не удается запустить webpack-dev-server внутри docker

я создал образ docker, который служит простому приложению react с помощью 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

пример кода над здесь

2 ответов


вы на самом деле слушаете только localhost. Чтобы быть доступным извне, замените следующую строку в пакете.файл 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


Я просто хочу добавить что-то в ответ Raphayol, если вы не можете включить горячую перезагрузку webpack-dev-server внутри контейнера.
Я не мог заставить режим Webpack или webpack-dev-server watch (--watch) работать даже после установки моей папки проекта в контейнер.
Чтобы исправить это, вам нужно понять, как webpack обнаруживает изменения файлов в каталоге.
Он использует одно из 2 программ, которые добавляют поддержку уровня ОС для просмотра изменений файлов под названием inotify и fsevent. Норматив Изображения Docker обычно не имеют этих (специально inotify для linux) предустановленных, поэтому вам нужно установить его в Dockerfile.
Найдите пакет inotify-tools в диспетчере пакетов дистрибутива и установите его. к счастью, все alpine, debian, centos имеют это.