gpt4 book ai didi

Docker:无法访问复制到某些图像的二进制文件

转载 作者:行者123 更新时间:2023-12-01 22:23:22 25 4
gpt4 key购买 nike

我正在尝试访问二进制文件 COPY编自 migrate容器。当我COPYpython:3.7-alpine它有效,但是当我 COPYdebian:buster-slim找不到。

重现的最小步骤:

1.创建Dockerfile.test

FROM migrate/migrate:v4.6.2 AS migrate
FROM python:3.7-alpine
COPY --from=migrate /migrate /
CMD "/migrate"
  • 构建并运行。这行得通。
  • docker build . -t migrate_test -f Dockerfile.test
    docker run --name migrate_test migrate_test:latest
    Usage: migrate OPTIONS COMMAND [arg...]
    migrate [ -version | -help ]
  • 停止并移除容器
  • docker stop migrate_test;docker rm migrate_test;
  • 更改 Dockerfile.test 中的图像
  • FROM migrate/migrate:v4.6.2 AS migrate
    FROM debian:buster-slim
    COPY --from=migrate /migrate /
    CMD "/migrate"
  • 构建并运行。这不起作用
  • docker build . -t migrate_test -f Dockerfile.test
    docker run --name migrate_test migrate_test:latest
    /bin/sh: 1: /migrate: not found

    最佳答案

    看起来您的工作正常,但只是为了向可能会发现您的问题的其他人澄清情况:
    问题是 migrate/migrate:v4.6.2建立在 Alpine图片,使用 MUSL libc ,而大多数其他发行版使用 glibc .您会收到“未找到”消息,因为内核正在寻找其路径嵌入在镜像中的动态加载程序,正如我们在 ldd 中看到的那样。命令:

    / # ldd /migrate
    /lib/ld-musl-x86_64.so.1 (0x7f9e42ebd000)
    libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f9e42ebd000)
    此二进制文件将在基于 Alpine 的镜像上可用,但在来自 Debian、Ubuntu、Fedora、CentOS 等的镜像上不可用。一种选择是简单地复制 Dockerfile 中必要的加载程序:
    FROM migrate/migrate:v4.6.2 AS migrate
    FROM debian:buster-slim
    COPY --from=migrate /migrate /
    COPY --from=migrate /lib/ld-musl-x86_64.so.1 /lib/ld-musl-x86_64.so.1

    CMD "/migrate"
    另一种解决方案是重建 migrate目标分布的命令。

    关于Docker:无法访问复制到某些图像的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61512853/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com