在Docker中构建映像之前复制文件

时间:2019-01-17 14:31:21

标签: docker influxdb

所以我只需要一件简单的事情,就是将一个脚本(其相对路径(来自工作目录)是 influxdb / init.iql InfluxDB初始化脚本)复制到该路径中 /docker-entrypoint-initdb.d / ,这是一种根据InfluxDB Docker映像doc初始化InfluxDB数据库的方法:

  

初始化文件   如果Docker映像在/docker-entrypoint-initdb.d文件夹中找到任何扩展名为.sh或.iql的文件,它将执行这些文件

现在,我的 docker-compose.yml 是:

version: "3.3"

services:
  influxdb:
    image: influxdb:latest
    container_name: influxdb
    ports:
      - "8087:8086"
    volumes:
      - influxdb-data:/var/lib/influxdb

volumes:
  influxdb-data:

我需要在生成图像之前 复制脚本,就像在指定路径中找到脚本一样,它将在构建图像时执行。

我该怎么做?我曾考虑过实现Makefile,但如果可能不向项目中添加不必要的额外部分,我宁愿使用Docker来完成此任务。

谢谢。

1 个答案:

答案 0 :(得分:1)

docker-compose文件告诉您如何运行映像,而不是如何构建映像。这两个是完全独立的概念。我也不知道你想做什么。如果需要使用数据初始化容器,只需将脚本(或iql文件)安装到docker-compose文件卷内的/docker-entrypoint-initdb.d位置,例如:

volumes:
  - influxdb-data:/var/lib/influxdb
  - project_import.sh:/docker-entrypoint-initdb.d/import.sh:ro

脚本(或iql文件)将在容器启动时执行,而不是在构建映像时执行。如果您不相信我,请查看图片的the entrypoint script,以了解此过程的工作原理。

请记住,这些脚本将在每次容器启动时执行。