错误 "/lib/x86_64-linux-gnu/libc.so.6: 找不到版本为 `GLIBC_2.33' 的库"

17

这是我的 Docker 文件:

FROM ubuntu:20.04
RUN apt-get update && apt-get upgrade -y
RUN apt-get install libssl-dev

RUN apt-get install -y -q build-essential curl
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

WORKDIR /command-agent
COPY . /command-agent
RUN cargo build --release
COPY /command-agent/target/release/command-agent /
EXPOSE 8080
ENTRYPOINT command-agent

成功构建了 Docker 镜像,但在运行容器时出现错误:
command-agent: /lib/x86_64-linux-gnu/libc.so.6: 版本 `GLIBC_2.34' 未找到(需要/command-agent/command-agent)
我不理解,如何解决这个问题?

2
这意味着您正在运行与编译时不同的libc。除非您打算确保它们是静态的,否则请确保在与要运行它们的平台相同的平台上编译可执行文件。 - Charles Duffy
1
请向您的软件包管理器(我已经很久没有使用Ubuntu了,我不记得dpkg命令)询问在两台机器上提供您的libc.so.6的软件包,包括确切的版本号。 - Charles Duffy
1
你也可以使用 objdumpnm 来查看每个库导出的特定符号。 - Charles Duffy
2
@CharlesDuffy 提出了一个很好的观点。除非您正确设置了 .dockerignore 文件,否则 target 目录也将被复制,然后如果您已经在本地运行过构建命令,cargo build 命令实际上不会重新构建。 - Herohtar
2
为了明确/明确,您希望确保在COPY过程中忽略target/目录。 - Charles Duffy
显示剩余10条评论
1个回答

6

当我避免使用/target目录时,IT对我很有效,并且现在可以在Ubuntu 20.0421.10的两个版本上工作。感谢@Charles Duffy@Herohtar提供了他们重要且有用的指导。

FROM ubuntu:21.10
RUN apt-get update && apt-get upgrade -y
RUN apt-get install libssl-dev

RUN apt-get install -y -q build-essential curl
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

WORKDIR /command-agent
COPY ./src/. /command-agent/src/
COPY .env /command-agent/
COPY Cargo.toml /command-agent/
COPY Cargo.lock /command-agent/
RUN cargo build --release

EXPOSE 8080
ENTRYPOINT /command-agent/target/release/command-agent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接