如何使用docker容器在Windows上使用docker开发Reactjs?
到目前为止,我已经能够运行我的应用程序了,但是livereload不起作用。
应用/结构
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
答案 0 :(得分:10)
This is a known limitation for Docker on Windows host。以下是Docker's documentation对此问题所说的内容:
共享驱动器上的inotify不起作用
目前,inotify在Docker for Windows上不起作用。这将 例如,当应用程序需要读/写时变得明显 到安装的驱动器上的容器。而不是依靠 filesystem inotify,我们建议您使用轮询功能 框架或编程语言。
- nodemon和Node.js的解决方法 - 如果您将nodemon与Node.js一起使用,请尝试此处所述的后备轮询模式:nodemon isn’t restarting node applications
- GitHub上的Docker for Windows问题 - 请参阅问题Inotify on shared drives does not work
但是,解决方法是使用轮询机制:
就你的情况而言,我已经在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内部使用轮询模式。