我正在尝试在运行另一个服务的码头容器上配置Elastic Agent。这个容器是基于高山Linux的,但是在下载并解压代理之后,我不能运行elastic-agent代理命令:它会报错一个“找不到”的文件,而这个文件实际上是存在的!
下面是一个最小的可重现示例
docker run --rm -it alpine sh
# cd /opt
# wget https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-7.14.2-linux-x86_64.tar.gz
# tar xvf elastic-agent-7.14.2-linux-x86_64.tar.gz
# cd elastic-agent-7.14.2-linux-x86_64/
# ./elastic-agent
sh: ./elastic-agent: not found
# ls -la
total 8452
drwxr-xr-x 3 root root 4096 Nov 18 17:38 .
drwxr-xr-x 1 root root 4096 Nov 18 17:38 ..
-rw-r--r-- 1 root root 41 Sep 15 17:00 .build_hash.txt
-rw-r--r-- 1 root root 41 Sep 15 17:00 .elastic-agent.active.commit
-rw-r--r-- 1 root root 13675 Sep 15 16:54 LICENSE.txt
-rw-r--r-- 1 root root 8586842 Sep 15 16:54 NOTICE.txt
-rw-r--r-- 1 root root 866 Sep 15 17:00 README.md
drwxr-xr-x 3 root root 4096 Nov 18 17:38 data
lrwxrwxrwx 1 root root 39 Nov 18 17:38 elastic-agent -> data/elastic-agent-574c21/elastic-agent
-rw-r--r-- 1 root root 9020 Sep 15 16:55 elastic-agent.reference.yml
-rw------- 1 root root 9017 Sep 15 16:55 elastic-agent.yml
# ./data/elastic-agent-574c21/elastic-agent
sh: ./data/elastic-agent-574c21/elastic-agent: not found我在一台x86_64主机上运行,从内核版本或包代码库可以看出:
# uname -a
Linux 59ae07b0dca8 5.10.47-linuxkit #1 SMP Sat Jul 3 21:51:47 UTC 2021 x86_64 Linux
# apk update
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
v3.14.3-14-g9234faeb0d [https://dl-cdn.alpinelinux.org/alpine/v3.14/main]
v3.14.3-12-g13e0706e2c [https://dl-cdn.alpinelinux.org/alpine/v3.14/community]
OK: 14942 distinct packages available似乎二进制文件可以正确地链接到库:
# ldd ./data/elastic-agent-574c21/elastic-agent
/lib64/ld-linux-x86-64.so.2 (0x7f1868c2f000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f1868c2f000)
libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7f1868c2f000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f1868c2f000)它还具有执行以下操作的权限
# ls -la /usr/local/bin/elastic-agent-7.14.2-linux-x86_64/data/elastic-agent-574c21/
total 57244
drwxr-xr-x 3 root root 4096 Nov 18 17:38 .
drwxr-xr-x 3 root root 4096 Nov 18 17:38 ..
drwxr-xr-x 2 root root 4096 Nov 18 17:38 downloads
-rwxr-xr-x 1 root root 58603536 Sep 15 17:00 elastic-agentstrace似乎也帮不上忙
# strace -f ./elastic-agent
execve("./elastic-agent", ["./elastic-agent"], 0x7fff9e17bee8 /* 7 vars */) = -1 ENOENT (No such file or directory)
strace: exec: No such file or directory
+++ exited with 1 +++我是不是漏掉了什么?在某些情况下,阿尔卑斯山会阻止二进制文件启动吗?
感谢您的帮助!
发布于 2021-11-18 18:48:39
问题似乎是您下载的编译版本的elastic-agent需要libc。高山linux使用muslc。
可以使用https://stackoverflow.com/a/38433396/5666087在高山地区安装glibc。然后elastic-agent就开始工作了。
FROM alpine
WORKDIR /opt
RUN wget -qO - https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-7.14.2-linux-x86_64.tar.gz \
| tar xz
# Add glibc
RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
&& wget -q https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.28-r0/glibc-2.28-r0.apk \
&& apk add glibc-2.28-r0.apk \
&& rm glibc-2.28-r0.apk并运行生成的映像(假设它的名称为elastic):
docker run --rm -it elastic /opt/elastic-agent-7.14.2-linux-x86_64/elastic-agenthttps://stackoverflow.com/questions/70024559
复制相似问题