You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译Erlang 26源码构建Docker镜像遇权限拒绝问题求助

从源码编译Erlang 26构建Docker镜像时出现权限拒绝错误

问题详情

执行docker build .时触发如下错误:

=> ERROR [ 7/14] RUN /home/erl/otp_src_26.0.2/make                                                                                                                       0.3s
------
 > [ 7/14] RUN /home/erl/otp_src_26.0.2/make:
#0 0.244 /bin/sh: 1: /home/erl/otp_src_26.0.2/make: Permission denied
------
Dockerfile:53
--------------------
  51 |     
  52 |     
  53 | >>> RUN /home/erl/otp_src_${ERLANG_VERSION}/make 
  54 |     
  55 |     RUN /home/erl/otp_src_${ERLANG_VERSION}/make install && \
--------------------
ERROR: failed to solve: process "/bin/sh -c /home/erl/otp_src_${ERLANG_VERSION}/make" did not complete successfully: exit code: 126

已尝试切换root用户、使用make 4.2、给源码目录加777权限,均未解决;本地执行相同编译步骤可正常完成。之前通过erlang-solutions源安装Erlang,但该源无最新版本,希望修复当前源码编译方式的问题,原Dockerfile如下:

FROM ubuntu:22.04

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
ENV ERLANG_VERSION 26.0.2
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update -qq && \
    apt-get install -y --no-install-recommends \
        ca-certificates \
        git \
        gnupg \
        inotify-tools \
        make \
        gcc \
        libssl-dev \
        libncurses-dev \
        wget && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Install Erlang
RUN wget -P /home/erl https://github.com/erlang/otp/releases/download/OTP-${ERLANG_VERSION}/otp_src_${ERLANG_VERSION}.tar.gz && \
    tar -xf /home/erl/otp_src_${ERLANG_VERSION}.tar.gz -C /home/erl

RUN /home/erl/otp_src_${ERLANG_VERSION}/configure

RUN /home/erl/otp_src_${ERLANG_VERSION}/make 

RUN /home/erl/otp_src_${ERLANG_VERSION}/make install && \
    rm -r /home/erl

WORKDIR /app

问题根源

你错误地尝试执行Erlang源码目录下的make文件——这个文件并非可执行脚本,只是Makefile的配套文件(本身没有执行权限)。正确的编译方式是调用系统安装的make命令,进入源码目录后执行编译操作。

修复方案

基础修改版Dockerfile

调整编译和安装步骤,改用系统make命令并进入源码目录执行:

FROM ubuntu:22.04

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
ENV ERLANG_VERSION 26.0.2
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update -qq && \
    apt-get install -y --no-install-recommends \
        ca-certificates \
        git \
        gnupg \
        inotify-tools \
        make \
        gcc \
        libssl-dev \
        libncurses-dev \
        wget && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Install Erlang
RUN wget -P /home/erl https://github.com/erlang/otp/releases/download/OTP-${ERLANG_VERSION}/otp_src_${ERLANG_VERSION}.tar.gz && \
    tar -xf /home/erl/otp_src_${ERLANG_VERSION}.tar.gz -C /home/erl

RUN cd /home/erl/otp_src_${ERLANG_VERSION} && ./configure

RUN cd /home/erl/otp_src_${ERLANG_VERSION} && make

RUN cd /home/erl/otp_src_${ERLANG_VERSION} && make install && \
    rm -r /home/erl

WORKDIR /app

优化版Dockerfile(减少镜像体积)

将多个RUN命令合并,减少镜像层数,同时提前清理下载的压缩包:

FROM ubuntu:22.04

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
ENV ERLANG_VERSION 26.0.2
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update -qq && \
    apt-get install -y --no-install-recommends \
        ca-certificates \
        git \
        gnupg \
        inotify-tools \
        make \
        gcc \
        libssl-dev \
        libncurses-dev \
        wget && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \
    # 下载并解压Erlang源码
    wget -P /home/erl https://github.com/erlang/otp/releases/download/OTP-${ERLANG_VERSION}/otp_src_${ERLANG_VERSION}.tar.gz && \
    tar -xf /home/erl/otp_src_${ERLANG_VERSION}.tar.gz -C /home/erl && \
    rm /home/erl/otp_src_${ERLANG_VERSION}.tar.gz && \
    # 编译安装Erlang
    cd /home/erl/otp_src_${ERLANG_VERSION} && \
    ./configure && \
    make && \
    make install && \
    # 清理源码目录
    rm -r /home/erl

WORKDIR /app

额外说明

  • 无需手动给源码目录加执行权限,系统make会自动读取目录内的Makefile完成编译。
  • 合并RUN命令能减少镜像层数,避免中间层残留无用文件,有效降低镜像体积。

内容的提问来源于stack exchange,提问作者addUsername

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:11:01