erlang Docker构建:/make:权限被拒绝

krcsximq  于 2023-09-28  发布在  Erlang
关注(0)|答案(1)|浏览(185)

我在尝试使用erlang 26从源代码编译构建映像时遇到了问题,当我运行docker build .时,我得到

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

我试过用USER root设置root用户,用make 4.2chmod 777设置整个文件夹,但没有任何变化。我可以在我的本地机器上遵循相同的步骤,它们工作。
在此之前,我使用https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb,但他们不提供最新版本。
我知道我可以使用官方形象,但我喜欢先这样做
这里是Dockerfile

  1. FROM ubuntu:22.04
  2. ENV LANG C.UTF-8
  3. ENV LC_ALL C.UTF-8
  4. ENV ERLANG_VERSION 26.0.2
  5. ENV DEBIAN_FRONTEND=noninteractive
  6. RUN apt-get update -qq && \
  7. apt-get install -y --no-install-recommends \
  8. ca-certificates \
  9. git \
  10. gnupg \
  11. inotify-tools \
  12. make \
  13. gcc \
  14. libssl-dev \
  15. libncurses-dev \
  16. wget && \
  17. apt-get clean && \
  18. rm -rf /var/lib/apt/lists/*
  19. # Install Erlang
  20. RUN wget -P /home/erl https://github.com/erlang/otp/releases/download/OTP-${ERLANG_VERSION}/otp_src_${ERLANG_VERSION}.tar.gz && \
  21. tar -xf /home/erl/otp_src_${ERLANG_VERSION}.tar.gz -C /home/erl
  22. RUN /home/erl/otp_src_${ERLANG_VERSION}/configure
  23. RUN /home/erl/otp_src_${ERLANG_VERSION}/make
  24. RUN /home/erl/otp_src_${ERLANG_VERSION}/make install && \
  25. rm -r /home/erl
  26. WORKDIR /app
epggiuax

epggiuax1#

/home/erl/otp_src_${ERLANG_VERSION}/make是一个目录,所以当你试图运行它时,你会得到一个神秘的消息“Permission denied”。
make可执行文件不在Erlang目录中。安装在/usr/bin中。Make假定您从项目所在的目录运行它。
而不是

  1. RUN /home/erl/otp_src_${ERLANG_VERSION}/configure
  2. RUN /home/erl/otp_src_${ERLANG_VERSION}/make
  3. RUN /home/erl/otp_src_${ERLANG_VERSION}/make install && \
  4. rm -r /home/erl

你可以cd到目录中并运行你需要的命令。这样

  1. RUN cd /home/erl/otp_src_${ERLANG_VERSION} && \
  2. ./configure && \
  3. make && \
  4. make install && \
  5. cd / && \
  6. rm -r /home/erl
展开查看全部

相关问题