drupal - Docker和Drupal 8-settings.php

标签 drupal docker systemd

我正在尝试对Drupal 8进行泊坞化,并且遇到了以下问题:在容器中运行Drupal 8并安装它之后,如果我随后删除该容器并再次启动它,它会提示再次安装它。

事实是,安装Drupal后,将使用数据库详细信息创建一个settings.php文件。

我想创建一个systemd单元文件,以一种灵巧的方式启动Drupal 8容器,即使将其删除,也应该在下一次安装时再次启动。

有人建议我编写一个带有ConditionPathExists=的systemd单元文件,以根据是否在本地安装settings.php来挂载它,但是我认为这不能完全起作用,因为在容器中进行安装时,生成的settings.php文件将无法持久保存到主机。

那么,如何解决为尚未安装的Drupal制作Docker容器的问题(如果尚未安装),然后从那时起使用已安装的实例,即使已移除并重建该容器也是如此?

最佳答案

我强烈建议使用正式的docker镜像进行drupal

  • https://hub.docker.com/_/drupal/

  • 节省了大量时间,并且如果您仍然需要自定义环境,至少可以查看其Dockerfile并查看社区的工作方式。

    容器持久性

    容器停止后,可以重新启动。它的所有文件都将保留,包括可能已创建的所有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 8建立在官方PHP语言镜像之上。
  • Drupal 8.1 Dockerfile
  • Php 7 Apache Dockerfile

  • 在PHP构建文件中,请注意foreground中如何运行Apache?
    CMD ["apache2-foreground"]
    

    无需在容器内运行systemd。

    关于drupal - Docker和Drupal 8-settings.php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35821846/

    相关文章:

    python - Azure ML 环境的自定义 Docker 文件包含 COPY 语句错误且 COPY 失败 :/path no such file or directory

    当 python 脚本作为 systemd 服务运行时,Python Popen 无法识别 scrapy

    php - 有没有办法知道 Drupal 7 中的 SelectQuery 结果中有多少行?

    sql - 将一个/两个 Drupal 安装中的内容导入到一个新的 Drupal 安装中

    maven - 在 docker build 中安装 maven 会用 JAVA 7(!)覆盖 JAVA 8

    docker - Keycloak 无法在 Docker 撰写文件中工作。我该如何修复它?

    docker - 无法在Docker容器中使用 `systemd-cat`

    Docker 容器在启用 systemd 脚本后重新启动后无法启动

    php - 使用 PhP/MySQL/Drupal 的带宽使用问题

    html - 如何使用 search_block_form 在 drupal 中生成 Bootstrap 表单