为啥我在 Gitlab CI/CD 管道上的 Docker 中收到“不允许跨设备链接”错误?

Posted

技术标签:

【中文标题】为啥我在 Gitlab CI/CD 管道上的 Docker 中收到“不允许跨设备链接”错误?【英文标题】:Why am I getting a 'cross-device link not permitted' error in Docker on Gitlab CI/CD pipeline?为什么我在 Gitlab CI/CD 管道上的 Docker 中收到“不允许跨设备链接”错误? 【发布时间】:2021-02-06 19:08:05 【问题描述】:

我尝试删除 node_modules 文件夹,但仍然出现错误。它工作正常,但突然开始抛出此错误。

这是一个反应应用程序,如果有帮助的话。

Docker 文件

## Stage 0, "builder", based on Node.js, to build and compile the frontend
# base image
FROM node:alpine as builder

# set working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

## add app
COPY . /app

# delete node modules to fix discrepancies
RUN rm -rf node_modules/

#RUN npm install && npm audit fix && npm audit fix --force && npm install
RUN npm install -g npm@7.0.3 && npm install && npm audit fix
RUN npm run build 

## Stage 1, "deployer", use nginx to deploy the code
## start app
FROM nginx:alpine

RUN rm -rf /usr/share/nginx/html/*
COPY --from=builder /app/build /usr/share/nginx/html/

RUN rm /etc/nginx/conf.d/default.conf
COPY ./nginx-custom.conf /etc/nginx/conf.d/default.conf

控制台错误

npm notice 
npm notice New patch version of npm available! 7.0.2 -> 7.0.3
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v7.0.3>
npm notice Run `npm install -g npm@7.0.3` to update!
npm notice 
npm ERR! code EXDEV
npm ERR! syscall rename
npm ERR! path /usr/local/lib/node_modules/npm
npm ERR! dest /usr/local/lib/node_modules/.npm-i9nnxROI
npm ERR! errno -18
npm ERR! EXDEV: cross-device link not permitted, rename '/usr/local/lib/node_modules/npm' -> '/usr/local/lib/node_modules/.npm-i9nnxROI'
npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-10-23T16_47_42_554Z-debug.log
The command '/bin/sh -c npm install -g npm@7.0.3 && npm install && npm audit fix' returned a non-zero code: 238

【问题讨论】:

我也有同样的问题,实际上可能是 npm 7 中的一个错误。但我无法确认。 【参考方案1】:

我遇到了同样的问题。由于您的基础映像是节点,因此 npm 应该已经全局安装。无需运行npm install -g npm@7.0.3,之后仍然可以执行所有与npm相关的项目。

【讨论】:

我可能错了,但这似乎只是通知,错误似乎是在安装软件包后出现的,不是吗?我将尝试删除该行并检查它是否有效。谢谢 在安装 NodeJS 后,可能需要运行 npm install -g npm@latest 以将 npm 更新到最新版本。【参考方案2】:

抱歉,没有足够的代表发表评论。

我实际上也遇到了类似的问题。 Node 已更新,已将 npm 版本提升到 7+,这似乎引起了人们的问题。在我完全解决问题之前,我的解决方案是将我的 Node/NPM 版本锁定在我的容器构建中。

FROM node:14.14-alpine3.11 是我正在使用的指令,让我保持在某个 6.x.x 版本以保持我的构建工作。

【讨论】:

以上是关于为啥我在 Gitlab CI/CD 管道上的 Docker 中收到“不允许跨设备链接”错误?的主要内容,如果未能解决你的问题,请参考以下文章

触发 Gitlab CI/CD 管道以部署存储库的特定部分

Gitlab CI/CD 管道给出 Dockerfile 错误

GitLab CI/CD 运行程序无法执行

Gitlab CI/CD 自动标记发布

为合并请求触发的管道运行应用 GitLab CI/CD 管道更改

在哪里指定 GitLab ci/cd 管道的存储库凭据?