ReactJs在docker容器上的开发

Bru*_*eis 8 docker reactjs

如何使用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" ]
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yml:

version: "2"

services:
  frontend:
    container_name: "boilerplate"
    build: .
    environment:
      env_file: .env
      NODE_ENV: development
    ports:
      - '3000:3000'
    volumes:
      - .:/usr/src/app
Run Code Online (Sandbox Code Playgroud)

Jor*_*nev 11

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

这是Windows主机上Docker的已知限制.以下是Docker的文档中有关该问题的内容:

共享驱动器上的inotify不起作用

目前,inotify不适用于Docker for Windows.例如,当应用程序需要跨安装的驱动器读取/写入容器时,这将变得明显.我们建议您使用框架或编程语言的轮询功能,而不是依赖于文件系统inotify.


解决方法

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

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

完整的Docker和React设置

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

这是我的配置(灵感来自@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" ]
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yml

version: "2"

services:
  frontend:
    container_name: "boilerplate"
    build: .
    environment:
      env_file: .env
      NODE_ENV: development
    ports:
      - '3000:3000'
    volumes:
      - .:/usr/src/app
Run Code Online (Sandbox Code Playgroud)

.ENV

CHOKIDAR_USEPOLLING=true
Run Code Online (Sandbox Code Playgroud)

脚本