无法从高山linux容器内运行jfrog可执行文件
我正在使用一个alpine linux
容器,特别是python:3.4-alpine
和openjdk:8-jdk-alpine
。 当我尝试执行任何脚本或可执行文件时,我已经在可执行文件中Not Found
错误。
例如。 当在python:3.4-alpine
容器中我想安装jfrog
我在这里按照命令(通过apk安装curl
之后)。 这个命令下载一个shell脚本,并pipe理它下载并创build一个具有正确权限的jfrog
可执行文件。 当我试图运行这个可执行文件,我越来越
bin / sh:./jfrog:找不到
更新
我发现root用户默认使用bin/ash
,我不知道它是什么。 所以我手动调用bin/sh jfrog
,并得到
/#bin / sh jfrog jfrog:第1行:ELF:找不到jfrog:第1行:语法错误:未终止的带引号的string
任何想法我做错了什么? 我怀疑它只与容器中存在的root用户有关。
我不确定,但jfrog可执行文件是dynamic链接的,并且使用ldd jfrog
:
ldd jfrog /lib64/ld-linux-x86-64.so.2 (0x55ffb4c8d000) libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x55ffb4c8d000) libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x55ffb4c8d000)
正如你可以看到你有libc的依赖,高山来与musl。 你可以尝试添加apk add libc6-compat
但我不知道它会工作
您正在运行的脚本开始于:
#!/bin/bash
Bash默认不包含在阿尔卑斯山之中。 你可以用下面的方法安装它
apk update && apk add bash
请注意,高山是相当剥离的devise,所以可能有其他缺less的依赖,你需要添加使这个脚本工作。
问题是,jfrog cli是针对glibc编译的,而高山linux只提供了uclibc。 为了使它在阿尔卑斯山下运行并不重要,你必须安装比阿尔卑斯山环境更大的沙箱。 https://wiki.alpinelinux.org/wiki/Running_glibc_programs
另外一种可能是你自己编译jfrog二进制文件。 这个Dockerfile为我工作。
FROM golang:alpine WORKDIR /app/ RUN apk update && apk add git # checkout the latest tag of jfrog cli RUN mkdir -p /go/src/github.com/jfrogdev/jfrog-cli-go \ && git clone https://github.com/JFrogDev/jfrog-cli-go /go/src/github.com/jfrogdev/jfrog-cli-go\ && cd /go/src/github.com/jfrogdev/jfrog-cli-go \ && git checkout $(git describe --tags `git rev-list --tags --max-count=1`) RUN GOOS=linux go get github.com/jfrogdev/jfrog-cli-go/jfrog FROM alpine COPY --from=0 /go/bin/jfrog /usr/bin/ ENTRYPOINT ["jfrog"]
- 高山linuxdocker上的apache-spark启动错误
- 在Alpine linux上安装ssh-keyscan?
- Debian Packagemanager不会在build立docker镜像时在alpine-linux上安装vagrant.deb软件包
- 使用mysql-client从Alpine Docker映像内部通过SSL连接到Amazon RDS。 并validation证书
- 多阶段构build – 没有这样的文件或目录
- Docker,Alpine,IonCube,PHP7 FPM
- PHP7无法加载Alpine Docker容器上的memcached和redis
- 如何使用“退出”后保留docker高山容器?
- getcap / setcap不能在Docker容器中使用Debian Stretch主机