【问题标题】:Is it possible create parent child Dockerfile and override the ENTRYPOINT?是否可以创建父子 Dockerfile 并覆盖 ENTRYPOINT?
【发布时间】:2020-10-18 16:26:38
【问题描述】:

我用 OpenJDK 基础镜像创建一个 DocherFile 并运行 init.sh 脚本。

我想继承该 Dockerfile 并将 init.sh 覆盖为 test.sh 脚本。

是否可以“测试” docker 文件继承或扩展“my-app” docker 文件并覆盖 ENTRYPOINT?

我应该在 docker-compose 中同时定义“my-app”和“test”docker吗? 我可以只使用 docker-compose 运行测试 docker 而不同时运行两者吗?

我的目的是在生产中只运行“my-app”docker。但是对于测试,我想扩展它并运行测试和更多配置。

我的应用程序/Dockerfile:

FROM openjdk:11-jre-slim
COPY initialization.sh /path/
ENTRYPOINT ["/bin/bash", "-c", "/path/init.sh"]

测试/Dockerfile:

FROM my-app
COPY tset.sh /path/
ENTRYPOINT ["/bin/bash", "-c", "/path/tset.sh"]

【问题讨论】:

  • 您尝试过什么,遇到了什么错误?
  • 您想只运行 init.sh 进行生产,只运行 tset.sh 进行测试吗?或者对于测试,您是否想要为生产运行的结果并将其用于测试?
  • 仅用于生产运行 init.sh。仅用于测试运行 test.sh 但也向 dockerfile 添加一些 RUN 命令。

标签: docker docker-compose docker-container


【解决方案1】:

这是一个想法,

你可以有不同的 docker-compose 文件。

  • docker-compose.yml:包含运行应用所需的所有图像的定义。

    my-api:
      image: yourImage
      build:
        context: .
        dockerfile: Dockerfile
      depends_on:
        - sqldata
    
  • docker-compose.override.yml:包含前一个文件的所有图像的基本配置。

     my-api:
      environment:
        - ENVIRONMENT=Development
        - DEBUG 
      ports:
        - "6105:80"
    

在 CLI 中同时使用这两个文件

docker-compose -f docker-compose.yml -f docker-compose.override.yml

这应该会默认启动你的应用程序将所有容器和默认环境。

生产

docker-compose.prod.yml :这是docker.override 的替代品,但包含适用于生产环境的配置、环境变量。

docker-compose -f docker-compose.yml -f docker-compose.prod.yml

测试 覆盖图片的默认入口点

  • docker-compose-test.override.yml

    app-test:
      environment:
        - ENVIRONMENT=Development
      ports:
        - "6103:80"
      entrypoint:
          - YourScript
          - memory=1
    

【讨论】:

  • 它覆盖了 docker-compose。但是是否可以先覆盖 Dockerfile?
猜你喜欢
  • 1970-01-01
  • 2018-08-08
  • 2023-04-01
  • 1970-01-01
  • 2019-05-12
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
相关资源
最近更新 更多