在docker build期间在主机上执行命令

是否有可能创buildDockerfile在图像生成时执行主机上的命令?

现在我在做:

 ./script_that_creates_magic_file.sh docker build . 

与Dockerfile:

 FROM alpine COPY magic_file 

我想能够做到:

 docker build . 

与Dockerfile:

 FROM alpine # invoke script_that_creates_magic_file.sh on the host COPY magic_file 

当然,这个脚本和Dockerfile在同一个目录下。

(只是一个build议)

我们通常有以下结构来build立我们的docker图像:

 my-image/ ├── assets │  ├── entrypoint.sh │  └── install.sh ├── build.sh ├── Dockerfile ├── README.md └── VERSION 
  • build.sh :这是你应该调用script_that_creates_magic_file.sh 。 其他常见任务包括下载所需文件或临时从主机复制ssh密钥。 最后,这个脚本会调用docker build .
  • Dockerfile :像往常一样,但取决于我们需要运行的命令的数量,我们可能会有一个install.sh
  • install.sh :在容器中复制并运行,安装软件包,删除不必要的文件等。没有百分之一百的确定 – 我认为这样的方法减less了在单个RUN避免多个命令的层数
  • entrypoint.sh :容器的入口点。 允许我们在容器启动(如parsing环境variables)和打印debugging信息时执行任务

我发现上面的结构方便和自我logging,因为团队中的每个人都可以build立任何形象(没有特别的指示/步骤)。 README在那里解释图像在做什么…但是我不会骗你…它通常是空的…(或者有一个用于显示gitlab的h1 ):)

回答这个问题; 没有没有内置的function来在docker build之前在主机上运行一个命令(即没有“钩子”来触发主机上的脚本)。

如果您提供了有关您的用例的更多信息,可能还有其他select(例如,使用--build-arg和docker撰写的组合)

尝试docker build . & ./script docker build . & ./script . docker build . & ./script