docker容器找不到文件,但是文件存在

时间:2020-03-16 06:21:15

标签: docker

我试图将gotty打包到Docker容器中,但是发现了奇怪的行为。

$ tree                                                                                                                                                                                                                
.
├── Dockerfile
├── gotty
└── gotty_linux_amd64.tar.gz

Dockerfile:

FROM alpine:3.11.3

RUN mkdir -p /home/gotty
WORKDIR /home/gotty
COPY gotty /home/gotty
RUN chmod +x /home/gotty/gotty
CMD ["/bin/sh"]

该图像的构建没有问题:

[strip...]
Removing intermediate container 0dee1ab645e0
 ---> b5c6957d36e1
Step 7/9 : COPY gotty /home/gotty
 ---> fb1a1adec04a
Step 8/9 : RUN chmod +x /home/gotty/gotty
 ---> Running in 90031140da40
Removing intermediate container 90031140da40
 ---> 609e1a5453f7
Step 9/9 : CMD ["/bin/sh"]
 ---> Running in 30ce65cd4339
Removing intermediate container 30ce65cd4339
 ---> 099bc22ee6c0
Successfully built 099bc22ee6c0

chmod成功更改了文件模式。因此/home/gotty/gotty存在。

$ docker run -itd 099bc22ee6c0
9b219a6ef670b9576274a7b82a1b2cd813303c6ea5280e17a23a917ce809c5fa
$ docker exec -it 9b219a6ef670 /bin/sh
/home/gotty # ls
gotty
/home/gotty # ./gotty
/bin/sh: ./gotty: not found

进入容器,那里有gotty命令。我用相对路径运行它。为什么选择not found

1 个答案:

答案 0 :(得分:1)

您正在遇到Alpine最臭名昭著的问题之一:Musl,而不是glibc。检出ldd gotty的输出。尝试添加libc6-compat

apk add libc6-compat

看看是否可以解决。