docker - `make install`在Docker内部失败

标签 docker perl makefile debian-jessie jmap

我正在尝试为名为 jmap-perl 的JMAP代理构建docker镜像。

documentation声明默认情况下以Debian Jessie为目标,因此我创建了以下Dockerfile:

FROM debian:jessie

# Port to expose.
EXPOSE 80

# Add all files in current directory
# to a new folder named `jmap-perl`
# in Debian Jessie's `/` folder.
ADD . / ./jmap-perl/

# Install `build-essential` (needed for `make install`) and `perl`.
# `apt-get update` is required to install `build-essential`.
RUN apt-get update && apt-get install -y \
    build-essential \
    perl

# Navigate to our new folder and run `make install`.
RUN cd /jmap-perl
RUN make install

# Run the scripts needed by the server.
CMD ["perl bin/apiendpoint.pl && perl bin/server.pl"]

我已将此Dockerfile添加到项目的根文件夹,并将所有内容复制到我们的Docker服务器。

在我们的Docker服务器上,我正在运行以下命令:
cd jmap-perl
docker build -t jmap-perl:latest .

一切正常,直到命中make install命令,该命令会产生以下错误:
Step 6/7 : RUN make install
---> Running in 6209e8b71062
make: *** No rule to make target 'install'.  Stop.
The command '/bin/sh -c make install' returned a non-zero code: 2

让我感到困惑的是,项目根目录中的Makefile已经包含install: all的一部分。

我需要更改Makefile或我的Dockerfile中运行的步骤吗?

最佳答案

这里有两件事要注意:

  • 对于此ADD . / ./jmap-perl/,应使用COPY而不是ADD:COPY . /jmap-perl/
  • 应该使用RUN cd /jmap-perl而不是WORKDIR /jmap-perl,以便在jmap-perl文件夹内执行后续命令。运行中的cd仅在单个RUN命令中有效。

  • 希望它会有所帮助:)

    关于docker - `make install`在Docker内部失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59999510/

    相关文章:

    Perl:仅查找 "pure perl"模块

    c++ - 在通用 Linux 上构建 sipXtapi - 安装错误

    docker - 如何在镜像更改后升级 docker 容器

    Python 文件写入在 docker 中不起作用

    python - Perl 的 (<>) 在 Python 中的等价物是什么? fileinput 没有按预期工作

    bash - 提取每个 ID 的主要号码和次要号码并生成 JSON 字符串

    makefile - 在 Makefile 中使用不同的标志进行编译?

    c++ - 如何将 C 生成文件移植到 C++ 生成文件?

    docker - 使用 Docker chown 容器目录 (ubuntu - mysql/mysql-server)

    docker - 不以 root 身份运行时从容器访问命名卷?