【问题标题】:Docker GLIBC Version Wrong - React ProjectDocker GLIBC 版本错误 - React 项目
【发布时间】:2021-04-21 08:31:15
【问题描述】:

经过一番搜索,我有点不知所措。也许有人可以指出我正确的方向。

我正在将一个 react 项目移动到客户端的 docker 容器中,因为他们想要使用容器进行部署,并且在项目运行 npm start 以启动开发服务器后出现此错误。开发服务器确实正式启动,但它不会编译 react 应用程序。

Error: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /app/node_modules/node-sass/vendor/linux-x64-88/binding.node)

我做了一些阅读,发现这是 gnu linux c 库的模块(希望我的措辞正确)。据我所知,我的反应应用程序正在寻找 GLIBC 的 2.29 版本,但 docker 容器只有 2.24 版本。

为了测试这一点,我通过将 bash shell 附加到 docker 容器来运行 lld。

sudo docker exec -it my-docker-container-id bash

ldd --version

返回

ldd (Debian GLIBC 2.24-11+deb9u4) 2.24 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Roland McGrath and Ulrich Drepper.

我在自己的环境中运行 react 开发服务器没有任何问题。所以我在主机上运行了相同的命令并获得了 2.32 版本。

主机返回...

ldd (GNU libc) 2.32 Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Roland McGrath and Ulrich Drepper.

所以这很有意义...我需要 2.29 版本,我在主机本地有 2.32 版本,但容器只有 2.24 版本。我的下一个想法是查看 Dockerfile 以了解它是如何加载所有内容的。

这里是 react 项目的 Dockerfile:

FROM node:latest
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
RUN chown -Rh $user:$user /app
USER $user
COPY package.json package-lock.json ./
RUN npm install
EXPOSE 3000
COPY . .
CMD ["npm", "start"]

我的下一个想法是尝试使用 FROM ubuntu:latest 而不是 node:latest 并在 docker 构建期间手动安装 npm(EDIT* 实际上我不知道这是否可能)。这可能不是最好的方法,所以我在这里寻求帮助。谢谢!

【问题讨论】:

  • RUN npm install 步骤将在镜像的node_modules 目录中安装包;您是否在.dockerignore 文件中列出node_modules,因此主机(可能不同)的node_modules 树不会被复制到图像中?
  • 我是个白痴,忘了在这里列出 node_modules。我现在要把它弹出并重建。
  • 嗯。我使用 .dockerignore 文件中列出的 node_modules 进行了重建。仍然有同样的错误
  • 不确定是否会有所不同——我删除了旧的容器和映像并从头开始重建,但仍然出现相同的错误。
  • 知道了!我删除了本地 node_modules 文件夹,一切正常。如果你回答我可以选择你的。感谢您花时间为我指明正确的方向!

标签: node.js reactjs linux docker glibc


【解决方案1】:

FROM node:latest 更改为FROM node:14

我使用 node-sass v4.14.1,在我的情况下它有所帮助。根据release支持的最高节点版本是14。

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 2016-05-22
    • 2022-12-01
    • 2022-01-24
    • 2018-07-21
    • 2021-05-21
    • 2019-08-02
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多