手动重新编译Symfony容器

我正在尝试创build一个dockerized symfony应用程序。 问题是DI容器在Docker容器构build期间被构build,这意味着我不能真正将运行时参数注入到其中。 到目前为止,我的解决scheme是清除容器入口点处的caching,但是我意识到在某些情况下,这可能是一个相当繁重的操作,所以我在AppKernel中根据内核的启动函数创build了一个自定义编译函数:

/** * Recompiles the container without warming up the whole cache. * * Can be called upon docker container start to inject custom parameters. */ public function compile() { // Load class cache if ($this->loadClassCache) { $this->doLoadClassCache($this->loadClassCache[0], $this->loadClassCache[1]); } // Initialize bundles to be able to parse configurations $this->initializeBundles(); $class = $this->getContainerClass(); $cache = new ConfigCache($this->getCacheDir().'/'.$class.'.php', $this->debug); $container = $this->buildContainer(); $container->compile(); $this->dumpContainer($cache, $container, $class, $this->getContainerBaseClass()); } 

现在将在每个Docker容器启动时(在应用程序启动之前)调用此函数。

这是一个安全的操作? 我应该假设任何caching加热器可能依赖容器参数? (因为我只更改容器参数运行时,服务和其他一切应该保持不变。

最初问一个symfony回购问题: https : //github.com/symfony/symfony/issues/19525

PR到我的自定义存储库: https : //github.com/webplates/symfony-standard/pull/42

这一般不能被回答,它完全取决于你使用的包和改变的参数。 例如,如果路由依赖于参数(例如,在路由上设置主机),仅重build容器是不够的,则需要预热来重build路由。