如何在多阶段docker构建中访问克隆的git repo?

如何在多阶段docker构建中访问克隆的git repo?,docker,Docker,我有一个停靠的日志库,我想添加一个额外的插件。 插件需要通过git clone下载,其依赖项需要使用jruby安装: bundle install rake install_jars 我想我可以先用git映像来克隆插件,然后用jruby映像将其刻录到插件文件夹中并安装gems。但是,当我尝试将cd刻录到插件文件夹时,会出现以下错误: /bin/sh: 1: cd: can't cd to logstash-input-pulsar 当我尝试构建Dockerfile时,完整的消息是: [log

我有一个停靠的日志库,我想添加一个额外的插件。 插件需要通过git clone下载,其依赖项需要使用jruby安装:

bundle install
rake install_jars
我想我可以先用git映像来克隆插件,然后用jruby映像将其刻录到插件文件夹中并安装gems。但是,当我尝试将cd刻录到插件文件夹时,会出现以下错误:

/bin/sh: 1: cd: can't cd to logstash-input-pulsar
当我尝试构建Dockerfile时,完整的消息是:

[logstash (master)]$ docker build -t logstash .
Sending build context to Docker daemon  70.03MB
Step 1/10 : ARG ELK_VERSION
Step 2/10 : FROM alpine/git
 ---> f54f496311fb
Step 3/10 : RUN git clone https://github.com/se7enkings/logstash-input-pulsar
 ---> Using cache
 ---> 93b473ae8753
Step 4/10 : FROM jruby:9
 ---> 4e5c810afeb7
Step 5/10 : RUN cd logstash-input-pulsar
 ---> Running in c1b9158d91d0
/bin/sh: 1: cd: can't cd to logstash-input-pulsar
The command '/bin/sh -c cd logstash-input-pulsar' returned a non-zero code: 2
ARG ELK_VERSION

FROM alpine/git as intermediate
RUN git clone https://github.com/se7enkings/logstash-input-pulsar

FROM jruby:9
COPY --from=intermediate /logstash-input-pulsar /logstash-input-pulsar
RUN cd /logstash-input-pulsar
RUN bundle install
RUN rake install_jars

# https://www.docker.elastic.co/
FROM docker.elastic.co/logstash/logstash:${ELK_VERSION}
RUN echo 'gem "logstash-input-pulsar", :path => "logstash-input-pulsar"
RUN bin/logstash-plugin install --no-verify
Dockerfile是:

[logstash (master)]$ docker build -t logstash .
Sending build context to Docker daemon  70.03MB
Step 1/10 : ARG ELK_VERSION
Step 2/10 : FROM alpine/git
 ---> f54f496311fb
Step 3/10 : RUN git clone https://github.com/se7enkings/logstash-input-pulsar
 ---> Using cache
 ---> 93b473ae8753
Step 4/10 : FROM jruby:9
 ---> 4e5c810afeb7
Step 5/10 : RUN cd logstash-input-pulsar
 ---> Running in c1b9158d91d0
/bin/sh: 1: cd: can't cd to logstash-input-pulsar
The command '/bin/sh -c cd logstash-input-pulsar' returned a non-zero code: 2
ARG ELK_VERSION

FROM alpine/git as intermediate
RUN git clone https://github.com/se7enkings/logstash-input-pulsar

FROM jruby:9
COPY --from=intermediate /logstash-input-pulsar /logstash-input-pulsar
RUN cd /logstash-input-pulsar
RUN bundle install
RUN rake install_jars

# https://www.docker.elastic.co/
FROM docker.elastic.co/logstash/logstash:${ELK_VERSION}
RUN echo 'gem "logstash-input-pulsar", :path => "logstash-input-pulsar"
RUN bin/logstash-plugin install --no-verify

我估计一旦git图像被破坏,
logstash input pulsar
文件夹就不会存在了。但我不确定如何将这些命令链接在一起。

问题似乎是由于在没有正确路径的基础映像上进行克隆造成的

你可以在Dockerfile下面试试,它应该可以工作

FROM alpine/git as intermediate
WORKDIR /app
RUN git clone https://github.com/se7enkings/logstash-input-pulsar

FROM jruby:9
COPY --from=intermediate /app/ /app
WORKDIR /app/logstash-input-pulsar
RUN bundle install
RUN rake install_jars


问题似乎是由于在没有正确路径的基础映像上进行克隆造成的

你可以在Dockerfile下面试试,它应该可以工作

FROM alpine/git as intermediate
WORKDIR /app
RUN git clone https://github.com/se7enkings/logstash-input-pulsar

FROM jruby:9
COPY --from=intermediate /app/ /app
WORKDIR /app/logstash-input-pulsar
RUN bundle install
RUN rake install_jars


这很有效,谢谢。如果我想在上一个构建命令中访问
/app/logstash input pulsar
,我可以再次从中间层复制吗?是的,您可以用与我们在第一层复制相同的方式复制。谢谢。如果我想在上一个构建命令中访问
/app/logstash input pulsar
,我可以再次从中间层复制吗?是的,您可以按照我们在第一层复制的方式复制。