我想在docker中运行我的create-react-app。我创建了react-app。写下Dockerfile
:
FROM node:10.13.0
RUN mkdir /frontend
WORKDIR /frontend
RUN npm install -g nodemon
EXPOSE 9000
# CMD npm start - (1)
# CMD nodemon start - (2)
# CMD nodemon ./src/index.js - (3)
我不会安装node_modules,也不会将所有文件复制到映像中,因为我将使用卷进行此操作。然后创建一个dockerfile
:
version: '2'
services:
frontend-dev:
build:
context: ./frontend
dockerfile: Dockerfile.dev
volumes:
- ./frontend:/frontend
ports:
- "9000:9000"
好。现在,我在Dockerfile.dev中取消注释(1)(现在注释了最后三行)并运行
docker-compose -f dockerfile.dev.yml build
docker-compose -f dockerfile.dev.yml up
有一个错误“未找到反应脚本”。好。这是因为我没有运行npm install
。我想在容器内执行npm install
。 但是在发生此错误后,我的容器停止了,我无法执行此命令。好!我从一个人那里听说,我可以使用nodemon
启动我的应用程序,并且如果出现错误-我的容器将不会停止。
好的。让我们评论(1),然后取消评论(2)。比跑
docker-compose -f dockerfile.dev.yml down
docker-compose -f dockerfile.dev.yml build
docker-compose -f dockerfile.dev.yml up
还有..同样的问题...容器已停止。好!我认为这是因为script
在默认情况下会执行react-scripts start
。可能是react-scripts
个失败原因吗?让注释(2)和取消注释(3),运行`
docker-compose -f dockerfile.dev.yml down
docker-compose -f dockerfile.dev.yml build
docker-compose -f dockerfile.dev.yml up
有效吗?。不。容器尚未停止。因此,我可以运行
docker-compose -f docker-compose.dev.yml exec frontend-dev npm install
docker-compose -f docker-compose.dev.yml restart frontend-dev
但是它不起作用,因为我还有另一个错误:
frontend-dev_1 | /frontend/src/index.js:1
frontend-dev_1 | (function (exports, require, module, __filename, __dirname) { import React from 'react';
frontend-dev_1 | ^^^^^
frontend-dev_1 |
frontend-dev_1 | SyntaxError: Unexpected identifier
frontend-dev_1 | at new Script (vm.js:79:7)
frontend-dev_1 | at createScript (vm.js:251:10)
frontend-dev_1 | at Object.runInThisContext (vm.js:303:10)
frontend-dev_1 | at Module._compile (internal/modules/cjs/loader.js:656:28)
frontend-dev_1 | at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
frontend-dev_1 | at Module.load (internal/modules/cjs/loader.js:598:32)
frontend-dev_1 | at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
frontend-dev_1 | at Function.Module._load (internal/modules/cjs/loader.js:529:3)
frontend-dev_1 | at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
frontend-dev_1 | at startup (internal/bootstrap/node.js:285:19)
frontend-dev_1 | [nodemon] app crashed - waiting for file changes before starting...
我不知道我该怎么做,我也不知道我需要什么。我需要这个“反应脚本”吗?他们是做什么的? react-script
真的很重要吗?如何在docker上运行我的应用程序?也许(2)的方法是正确的,我只需要解决其他小问题?..请帮助我。