Docker容器

时间:2017-03-23 12:37:45

标签: reactjs docker

如何使用docker容器在Windows上使用docker开发Reactjs?

到目前为止,我已经能够运行我的应用程序了,但是livereload不起作用。

应用/结构

  • 构建
  • node_module
  • 公共
  • SRC
  • 搬运工-compose.yml
  • Dockerfile

Dockerfile

FROM node:5.11.0-slim

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

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

ADD . /usr/src/app/

CMD [ "npm", "start" ]

搬运工-compose.yml:

version: "2"

services:
  frontend:
    container_name: "boilerplate"
    build: .
    environment:
      env_file: .env
      NODE_ENV: development
    ports:
      - '3000:3000'
    volumes:
      - .:/usr/src/app

2 个答案:

答案 0 :(得分:10)

这是Windows的一个已知限制(不要太担心,有一个很好的解决方法)

This is a known limitation for Docker on Windows host。以下是Docker's documentation对此问题所说的内容:

  共享驱动器上的

inotify不起作用

     

目前,inotify在Docker for Windows上不起作用。这将   例如,当应用程序需要读/写时变得明显   到安装的驱动器上的容器。而不是依靠   filesystem inotify,我们建议您使用轮询功能   框架或编程语言。

     

解决方法

但是,解决方法是使用轮询机制:

  • chokidar - node.js fs.watch / fs.watchFile / fsevents周围的整洁包装。
  • nodemon - 监控node.js应用程序中的任何更改并自动重启服务器 - 非常适合开发
  • webpack - 如果观看对您不起作用,请尝试投票选​​项。观察不适用于VirtualBox中的NFS和计算机。
  • 等...

完整的Docker&反应设置

就你的情况而言,我已经在Docker容器中启动了react-create-app,并且livereload功能非常完美。通过创建.env配置文件来获取enable chokidar polling

以下是我的配置(inspired by @haluvibe):

<强> Dockerfile

FROM node:6.9.4

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

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

ADD . /usr/src/app/

EXPOSE 3000
CMD [ "npm", "start" ]

<强>搬运工-compose.yml

version: "2"

services:
  frontend:
    container_name: "boilerplate"
    build: .
    environment:
      env_file: .env
      NODE_ENV: development
    ports:
      - '3000:3000'
    volumes:
      - .:/usr/src/app

<强> .ENV

CHOKIDAR_USEPOLLING=true

脚本

  • docker-compose up -d - 启动您的项目,它将在http://localhost:3000
  • 上提供
  • docker-compose run --rm boilerplate /bin/bash - 访问您的容器。

答案 1 :(得分:1)

有时候,当应用程序在容器中运行时,livereload可能无法正常工作。如果项目在虚拟机(例如,已配置Vagrant的VirtualBox)中运行,请在项目目录中创建一个.env文件(如果不存在) ,然后添加CHOKIDAR_USEPOLLING = true。这样可以确保下次运行npm start时,观察者会根据需要在VM内部使用轮询模式。