docker-compose 卷开始表现奇怪,切换分支后没有文件权限

Eit*_*ank 5 node.js docker docker-compose devops

我们已经使用 docker-compose 一年了,没有遇到任何问题。在过去的一周里,我们每个人都开始遇到与权限相关的奇怪错误

at internal/main/run_main_module.js:17:47 : Error: EPERM: operation not permitted, open <PATH TO FILE>

仅当我切换分支时才会发生

组成结构:

version: "2.4"

# template:
x-base: &base-service-template
  env_file:
    - ./.env
  working_dir: /app/
  volumes:
    - ./src:/app/src:cached

services:

  service1:
    image: service1
    <<: *base-service-template

  service2:
    image: service2
    <<: *base-service-template
Run Code Online (Sandbox Code Playgroud)

我们都在 OSX 上工作。我们尝试授予 docker 对文件系统的权限,但仍然不起作用。

有一些东西是有效的。重新启动守护进程。但我不想每次切换分支时都重新启动守护进程

附加信息:

每个服务的 docker 文件库如下所示

FROM node:12-alpine as builder

ENV TZ=Europe/London
RUN npm i npm@latest -g
RUN mkdir /app && chown node:node /app
WORKDIR /app

RUN apk add --no-cache python3 make g++ tini \
    && apk add --update tzdata

USER node
COPY package*.json ./
RUN npm install --no-optional && npm cache clean --force
ENV PATH /app/node_modules/.bin:$PATH
COPY . .

FROM builder as dev
USER node
CMD ["nodemon", "src/services/service/service.js"]

FROM builder as prod
USER node
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["node", "src/services/service/service.js"]

Run Code Online (Sandbox Code Playgroud)

我在开发层运行,以便我们可以利用 nodemon 代码重新加载。

Docker 版本:Docker 版本 19.03.13,内部版本 4484c46d9d

docker-compose 版本:docker-compose 版本 1.27.4,内部版本 40524192

Eit*_*ank 5

所以在尝试了一些奇怪的东西之后,我发现的答案是:

这样做之后:

在此输入图像描述

请记住重新启动运行 compose 的 shell。

来自未来的编辑:有时它仍然会表现不佳,因此这可能无法解决每个人的问题