所以我使用 ADD 在 docker 文件中添加了一个文件
...
ADD flvcheck /usr/local/bin/flvcheck
它构建正确并且文件就在那里:
$ docker run --rm=true -ti image ls -l /usr/local/bin/flvcheck
-rwxrwxr-x 1 root root 1659908 May 20 07:56 /usr/local/bin/flvcheck
但是当我尝试运行它时我得到了:
$ docker run --rm=true -ti image /usr/local/bin/flvcheck
2014/05/20 08:43:25 no such file or directory
我甚至安装了 strace 并使用了 -D=true,但问题是找不到该文件:
execve("/usr/local/bin/flvcheck", ["flvcheck"], [/* 8 vars */]) = -1 ENOENT (No such file or directory)
这是怎么回事?我找不到问题所在(该文件在主机系统中运行正常,我可以在docker中看到它的内容
答案1
我发现这是由于架构所致。容器正在运行 x86_64 映像(默认 debian:squeeze),文件位于 i386 中。
红鲱鱼是因为文件未找到,并没有提到文件本身,而是文件加载器...这是一个有用的错误消息...
要解决这个问题,只需安装 i386 库。对于 ubuntu 基础镜像,将其添加到 dockerfile 将解决您的问题:
RUN apt-get install -y ia32-libs
对于其他人(甚至较新的ubuntu 图像),这可能会变得更加棘手。