【发布时间】: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