docker - 如何在多阶段 docker build 中访问克隆的 git repo?
问题描述
我有一个 dockerised logstash,我想添加一个额外的插件logstash-input-pulsar。该插件需要通过 git clone 下载,其依赖项需要使用 jruby 安装:
bundle install
rake install_jars
我想我可以先使用 git 映像来 git clone 插件,然后使用 jruby 映像 cd 到插件文件夹并安装 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
Dockerfile 是:
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
我认为logstash-input-pulsar
一旦 git 映像被破坏,该文件夹就不会持续存在。但是我不确定如何将这些命令链接在一起。
解决方案
似乎问题是由于在没有正确路径的基础图像上克隆造成的。
您可以在 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
推荐阅读
- regex - 在右括号后附加各种文本
- python - 如何使用 df 中的列对 Excel 工作表进行分组?
- sql-server - 我想在 vs 2017 中部署 SSIS 包时出错
- node.js - Node.js 中的默认值
- python - Pandas Dataframe:计算 2 天、3 天和 5 天股票价格的相关性
- c++ - Raycasting 使用 OPENGL/C++ 将 2d 胸部 CT 扫描渲染为 3d
- python - 我想在 Python 上使用 smtplib 定义服务器,但发生错误
- html - 如何使用 3 个矩形制作六角星形设计?
- itfoxtec-identity-saml2 - 带有自签名证书的 Saml2Configuration.SigningCertificate 中的私钥错误
- android-studio - java.lang.ClassNotFoundException:找不到类“my.package.name”