docker - 如何构建与基础镜像具有相同标签的Docker镜像?

标签 docker dockerfile

我有一种情况,我想从一些基础镜像创建docker镜像,并在此过程中进行一些修改(就像您所做的一样),并且我正在寻找某种方法来保留基础镜像标签。

让我举例说明。

我想使用此Dockerfile构建一个新的logstash镜像:

FROM docker.elastic.co/logstash/logstash:5.5.2
RUN /opt/logstash/bin/logstash-plugin install logstash-input-jdbc
RUN mkdir /opt/logstash/vendor/jdbc
RUN curl -Lo /opt/logstash/vendor/jdbc/postgresql-42.1.1.jar https://jdbc.postgresql.org/download/postgresql-42.1.1.jar

我希望生成的图像也以标签5.5.2结尾,就像原始基础图像一样。

我知道构建完成后就可以从命令行中对其进行标记,但是我正在寻找某种方法(如果存在):
  • 从Dockerfile中“提取”此标签,因此我可以在docker build -t选项
  • 中使用它
  • 将一些变量传递到Dockerfile中,该变量可以代替5.5.2图像标签

  • 感谢您的帮助和想法!

    最佳答案

    您需要在docker文件中使用构建参数

    ARG LOGSTASH_VERSION
    FROM docker.elastic.co/logstash/logstash:${LOGSTASH_VERSION}
    RUN /opt/logstash/bin/logstash-plugin install logstash-input-jdbc
    RUN mkdir /opt/logstash/vendor/jdbc
    RUN curl -Lo /opt/logstash/vendor/jdbc/postgresql-42.1.1.jar https://jdbc.postgresql.org/download/postgresql-42.1.1.jar
    

    然后使用docker build命令行传递值
    docker build --build-arg LOGSTASH_VERSION=5.5.2 .....
    

    关于docker - 如何构建与基础镜像具有相同标签的Docker镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46070018/

    相关文章:

    java - 在 tomcat docker 上部署 java REST 服务

    mysql - 在 Docker 容器中运行 Spring Boot 应用程序,无法连接 MySQL

    docker - 如何在 docker-compose 文件中使用等待?

    python - Docker `/bin/sh: 1: [<executable>, : not found`

    go - 访问Docker Swarm集群上Couchbase容器的IP地址

    docker - Dockerfile COPY将文件放置到意外目录

    docker - 具有不同上下文路径的多个 docker-compose 文件

    Dockerfile 构建错误 : Unable to locate

    node.js - docker swarm 中容器之间的通信

    java - docker 上的 cucumber 测试不会在集成测试阶段触发