【发布时间】:2022-01-18 01:11:30
【问题描述】:
我正在尝试 dockerize 一个简单的 create-react-app 项目。 (是运行npx create-react-app test后的初始项目,没有文件被改变)。
问题似乎是在较新版本的React 中,他们将烦人的.eslintcache 从根文件夹移至/node_modules/.cache,导致容器尝试通过docker-compose 运行应用程序时出现问题。
Dockerfile
FROM node:alpine
WORKDIR /usr/app
COPY package*.json ./
RUN npm install
RUN chown -R node.node /usr/app/node_modules
COPY . ./
CMD ["npm", "start"]
码头工人撰写
version: '3'
services:
test:
stdin_open: true
build:
context: .
dockerfile: Dockerfile
environment:
- CHOKIDAR_USEPOLLING=true
volumes:
- /usr/app/node_modules
- .:/usr/app
ports:
- '3000:3000'
容器正在记录此错误消息:
test_1 | Failed to compile.
test_1 |
test_1 | EACCES: permission denied, mkdir '/usr/app/node_modules/.cache
如您所见,我尝试将node_modules 文件夹所有者设置为节点用户(node:alpine 的默认用户),但它不起作用;探索容器,您可以看到node_modules 文件夹仍归root 所有:
drwxrwxr-x 5 node node 4096 Apr 14 07:04 .
drwxr-xr-x 1 root root 4096 Apr 14 07:08 ..
-rw-rw-r-- 1 node node 310 Apr 14 06:56 .gitignore
-rw-rw-r-- 1 node node 192 Apr 14 07:30 Dockerfile
-rw-rw-r-- 1 node node 3369 Apr 14 06:56 README.md
drwxrwxr-x 1061 root root 36864 Apr 14 07:12 node_modules
-rw-rw-r-- 1 node node 692936 Apr 14 06:56 package-lock.json
-rw-rw-r-- 1 node node 808 Apr 14 06:56 package.json
drwxrwxr-x 2 node node 4096 Apr 14 06:56 public
drwxrwxr-x 2 node node 4096 Apr 14 06:56 src
我还尝试创建文件夹 RUN mkdir -p /usr/app 并使用 USER node,但最终导致 npm 无法创建 node_modules 文件夹的问题。
是否有任何解决方法,其中.eslintcache 被禁用或node_modules 归node 用户所有?
更新
显然,这是因为我使用 Ubuntu 并且 docker 在 Linux 系统上以 root 身份安装卷。
【问题讨论】:
-
我会删除
volumes:以便您实际运行映像中内置的代码。这也避免了您所描述的各种权限问题,并且意味着您的package.json文件的更改将得到尊重。您可以直接运行node,无需Docker 进行开发,也可以运行eslint等开发人员专用工具。 -
我想知道我是否可以这样做,因为我想要一个完整的 dockerized 开发环境;我在
docker-compose中有另外两个服务(返回和 mongo)。另外,它似乎在上一个 CRA 版本之后开始发生,我发布的配置在以前的版本中有效。
标签: docker npm docker-compose create-react-app