Docker-Compose:初始化和运行

我将现有的rails应用程序迁移到docker和docker-compose。 只有在创build容器时才需要运行一些脚本,例如将prod数据库复制到一个卷中并在Elasticsearch中编制索引的脚本。

从那时起,当我在本地启动容器进行开发时,我只想运行rails开发服务器,而不是所有的db init脚本。 我可以创build两个docker-compose文件(比如说initrun ),它们除了webapp容器上的command:选项外都是一样的。

有没有更好的办法?

基本的Docker系统对自定义脚本没有“运行中”的概念。

你可以做的是这些方法之一:

  • 添加到您的脚本检查是否已经完成。 那么如果你一次又一次地重新运行它并不重要。
  • 将数据库集成到docker中,然后像载入的数据一样装载。
  • 做一个2部分docker系统:第一个将是你现在知道的一个可能的“ONBUILD”命令的docker,所以第二个将运行脚本。 然后第二个docker是一个inheritance原来的一个,并会运行脚本有或没有上面的“ONBUILD”。 在docker-compose中,您将拥有一个本地构build,这将在创build本地泊坞窗映像时触发导入。

只是一个想法

你可以在你的compose * .yml文件中使用extends

扩展文档和示例。