NodeJS 错误:EISDIR:在Docker中生成项目时对目录错误进行非法操作

guicsvcw  于 2023-04-11  发布在  Node.js
关注(0)|答案(1)|浏览(240)

我在Hexo中有一个长期运行的项目,最近我想将其更新到最新版本(6.3.0)。完成后,该项目在macOS上正常运行,本地没有问题,并在Docker上正常构建,但在GitLab CI上运行时,我收到以下错误:

Error: EISDIR: illegal operation on a directory, open '<directory>'

Dockerfile用于测试:

FROM node:18.15.0-alpine3.16

WORKDIR /app
COPY . .

RUN apk update && apk add --no-cache yarn

CMD ["sh", "-c", "yarn install && yarn run generate && ls -l public"]

使用的package.json

{
  "name": "my-project",
  "version": "1.0.0",
  "private": true,
  "hexo": {
    "version": "6.3.0"
  },
  "scripts": {
    "server": "./node_modules/hexo/bin/hexo server --draft",
    "generate": "./node_modules/hexo/bin/hexo generate"
  },
  "dependencies": {
    "hexo": "6.3.0",
    "hexo-generator-archive": "2.0.0",
    "hexo-generator-category": "2.0.0",
    "hexo-generator-feed": "3.0.0",
    "hexo-generator-index": "3.0.0",
    "hexo-generator-tag": "2.0.0",
    "hexo-renderer-ejs": "2.0.0",
    "hexo-renderer-marked": "6.0.0",
    "hexo-renderer-stylus": "2.1.0",
    "hexo-server": "3.0.0"
  }
}

在本地运行:

docker build -t my-project .
docker run -it -rm my-project

一切都按预期工作。项目生成得很好。
但是当我在GitLab CI中执行这个Dockerfile时,我得到了错误。
我的.gitlab-ci.yml

image: docker:20.10.23

variables:
  DOCKER_TLS_CERTDIR: ""

services:
  - docker:20.10.23-dind

before_script:
  - docker info

deploy:
  stage: deploy
  only:
    - master
  script:
    - docker build -t my-project .
    - docker run my-project

我假设这与容器中的权限或Node.js设置有关,但我找不到它可能是什么。
我尝试了成千上万种不同的方法来解决这个问题,经历了多个SO问题,文档,我被卡住了:

  • 在Gitlab上的Docker构建中尝试了Docker,但也尝试了常规的容器构建-以前它工作得很好。
  • 尝试不同的Docker镜像版本
  • 尝试了不同版本的Node.js运行时,尝试了npmyarn

更新:
这肯定是Hexo和Node.js运行时的问题。使用Node.js 12时一切正常。将Node.js升级到14(及更高版本)会导致构建失败。使用Hexo 3,5,6和7进行测试。

FATAL {
68  err: [Error: EISDIR: illegal operation on a directory, open 'some-path'] {
69    errno: -21,
70    code: 'EISDIR',
71    syscall: 'open',
72    path: 'some-path'
73  }
74} Something's wrong. Maybe you can find the solution here: %s https://hexo.io/docs/troubleshooting.html

所以现在唯一的选择似乎是坚持使用Node.js 12,但是没有更新Hexo的选项,因为新的包需要Node.js 14或更高版本。

vuktfyat

vuktfyat1#

在进一步调查并将此报告给Hexo GitHub后,我终于找到了解决问题的解决方案。
它与博客文章条目的 meta中的permalink属性有关。
我修改了每篇博客文章的permalink属性,并将/index.html附加到它:
之前:
permalink: selenium/selenium-manager
之后:
permalink: selenium/selenium-manager/index.html
一旦完成了这一点,一切都开始像一个魅力。
帮助我找到解决方案的原始评论:https://github.com/hexojs/hexo/issues/4682#issuecomment-1149868769

相关问题