Docker和Drupal 8 – settings.php

我试图dockerize Drupal 8,我遇到了这个问题,在容器中运行Drupal 8并安装它,如果我然后删除容器并重新启动它,它会提示再次安装它。

事情是,当Drupal安装时,一个settings.php文件是用数据库细节创build的。

我想创build一个系统化的单元文件来启动Drupal 8容器,即使它被删除了,也应该在下次重启时使用相同的安装。

有人build议我用ConditionPathExists=来编写一个systemd单元文件,根据它是否在本地存在,然后mount settings.php ,但是我认为这样做不能完全正常工作,因为在容器中安装时,生成的settings.php文件不会完成,不能坚持回主机。

那么如何解决为Drupal制作Docker容器的问题,如果它尚未安装,那么可以安装它,即使容器被移除并重build,也可以使用已安装的实例吗?

我强烈推荐使用drupal官方的docker镜像

节省了大量的时间,如果你仍然需要定制你的环境,至less你可以看看它的Dockerfile,看看它是如何完成的社区。

容器持久性

当容器停止时,可以重新启动。 所有的文件都被保存下来,包括可能已经创build的任何settings.php文件。

另一方面,一个全新的容器,将始终从头开始,避免这种情况不是一个简单的方法。 要跨容器实例持久保存数据,您需要使用卷。

https://docs.docker.com/engine/userguide/containers/dockervolumes/

这是如何完成的:

 # # Create a data container # docker create \ -v /var/www/html/sites \ -v /var/www/private \ --name my-data \ drupal # # Run drupal without a db container (select sqlite on first install) # docker run --volumes-from my-data --name my-drupal -p 8080:80 -d drupal 

注意:

  • 您可以使用卷映射到主机,但是这个数据容器模式更加灵活,例如在升级drupal时。

怎么运行的

Drupal 8build立在官方的PHP语言图像之上。

  • Drupal 8.1 Dockerfile
  • PHP 7 Apache Dockerfile

在PHP构build文件中注意Apache如何在前台运行?

 CMD ["apache2-foreground"] 

没有必要在容器内运行systemd。