【问题标题】:sh can't run executablesh 无法运行可执行文件
【发布时间】:2020-12-29 12:51:28
【问题描述】:

我试图在 alpine 的 docker 容器中运行一个可执行文件:

/usr/src/server # ls -l
total 57472
-rw-r--r--    1 root     root           166 Dec 29 12:22 Dockerfile
-rwxr-xr-x    1 root     root      58844530 Dec 29 12:35 server
/usr/src/server # ./server
/bin/sh: ./server: not found

在尝试运行容器时它给了我file not found 错误,我错过了什么?

Dockerfile

FROM alpine:3.12.3

# Create server directory
WORKDIR /usr/src/server

# Bundle server Source
COPY . .

# Expose Port and Start Server
EXPOSE 3000
CMD [ "./server" ]

构建 Dockerfile(使用 buildkit)

FROM node:14 AS build-stage

# Create server directory
WORKDIR /usr/src/server 

# Install Nexe
RUN npm i nexe@3.3.7 -g

# Install Server Dependencies
COPY package*.json ./
RUN npm install --only=production

# Bundle server Source
COPY . .

# Build
RUN nexe app.js -r config/db.js -r config/email.js -r config/passport.js -r config/config.env \
                -r middleware/auth.js \
                -r models/Option.js -r models/Token.js -r models/User.js -r models/Votacao.js -r models/Voto.js \
                -r routes/auth.js -r routes/votacao.js \
                -t linux-x64-12.14.1 \
                -o server

# Copy to Build
FROM scratch AS export-stage
COPY --from=build-stage /usr/src/server/server /server

nexe阶段一团糟,我还在移植到webpack...

【问题讨论】:

  • 你从哪里得到server?请记住,alpine 不使用 Glibc,也没有附带 GNU 动态加载器。
  • Nexe 生成它:npmjs.com/package/nexe
  • 请分享你的 Dockerfile 内容为这个镜像
  • 如果您的映像缺少您构建的二进制文件的共享库,您将收到该错误。你可以运行ldd server,看看它会返回什么。另请注意,Alpine 的某些核心库版本不同,可能会导致兼容性问题;查看 Nexe 文档,看起来它的基础工具有一个 Alpine 变体,或者您可以构建一个基于 Debian 或 Ubuntu 的最终映像。
  • 解决了,ldd给了我一些问题,debian开箱即用,请回复而不是评论,标记为已解决。

标签: linux docker sh alpine


【解决方案1】:

你是对的,ldd 给了我一些错误:

加载共享库 libstdc++.so.6 时出错:没有这样的文件或目录(服务器需要)

加载共享库 libgcc_s.so.1 时出错:没有这样的文件或目录(服务器需要)

使用 debian 解决了这些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-14
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2012-11-24
    相关资源
    最近更新 更多