当前位置: 首页 > 面试题库 >

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

令狐高洁
2023-03-14
问题内容

我正在尝试COPYmigrate容器访问二进制ed
。当我COPY使用python:3.7-alpine它时,但是找不到我COPY使用debian:buster-slim它时。

复制的最小步骤:

1.创建Dockerfile.test

FROM migrate/migrate:v4.6.2 AS migrate
FROM python:3.7-alpine
COPY --from=migrate /migrate /
CMD "/migrate"
  1. 构建并运行。这可行。

    docker build . -t migrate_test -f Dockerfile.test
    docker run –name migrate_test migrate_test:latest

    Usage: migrate OPTIONS COMMAND [arg…]
    migrate [ -version | -help ]

  2. 停止并取出容器

    docker stop migrate_test;docker rm migrate_test;

  3. 在Dockerfile.test中更改图像

    FROM migrate/migrate:v4.6.2 AS migrate
    FROM debian:buster-slim
    COPY –from=migrate /migrate /
    CMD “/migrate”

  4. 构建并运行。这不行

    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基于使用MUSL libc的Alpine映像构建,而其他大多数发行版都使用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为您的目标发行版重建命令。



 类似资料:
  • 我有一个包含多个属性的属性文件。多个对多个(我们的)产品有效,有些只对一个产品有效(不能通过属性名称区分)。因此,在一个产品基于ANT的构建过程中,我想将包含所有属性的原始文件复制到产品特定文件中,跳过适用于其他产品的部分。我可以想象使用一些开始和结束标记,例如。 对于产品 1,我想获取文件 和产品2 ANT是否可能实现这样的事情,或者我应该编写自己的Java帮助程序类?

  • 我正在使用PyCharm和PySpark运行一个巨大的文本文件。 这就是我想做的: 但是,PyCharm抛给我这个错误: 我只是不明白为什么。toPandas()不工作。Spark版本为2.3。这个版本有什么我不知道的变化吗?我用spark 2.2在另一台机器上运行了这段代码,它运行得很好。 我甚至把出口线改成了这样 仍然得到相同的错误。我做错了什么?是否有其他方法可以在不影响性能的情况下将导出到

  • 我使用模块连接到返回PNG图像的php脚本。如果我这样做: 但是它在编写时给出了UnicodeEncodeError,所以我使用了而不是。文件已创建,但我无法在图像查看器中查看它(它会出错)。但是,如果我右键单击并在Firefox中保存该脚本返回的PNG,我可以在保存后在同一图像查看器中查看它。所以我猜我将图像数据写入文件的方式有问题。还有别的办法吗?

  • 我想循环查看Audio\u files文件夹中的文件,检查它是原始文件还是wave文件,并将其放在相应的目录中。这是我的代码: 请告诉我哪里出错了。我得到的错误是: 回溯(最近一次调用last):文件“/checkaudiofiles.py”,第12行,在shutil中。复制(文件,目标)文件“/usr/lib/python2.7/shutil.py”,第119行,在copyfile(src,ds

  • 我有一个多模块maven项目,我想为每个模块创建和发布一个映像,除了一个通用的实用程序模块,它是所有其他模块的依赖项。 项目结构如下: 为了构建一个fox示例中的module\u,我需要将common\u module文件夹也复制到容器中,并首先在common文件夹上运行mvn install。如果已经构建好,我可以在模块a

  • 我有一个简单的Dockerfile来将python需求构建到一个zip文件中,然后上传到AWS Lambda。 有没有复制python的方法。在dockerfile期间将图像压缩到主机?