我想使用drush。它需要在Drupal容器中运行。还有一个drush docker repo。但我不知道如何让它在Drupal容器中可用。这是我的第一个Docker和Drupal项目,所以也许我完全搞错了。
如何使用Drush和这个Drupal Docker镜像?https://hub.docker.com/_/drupal/可以用docker-compose来管理它吗?也许扩展Drupal容器?
这是我的docker-compose.yml
:
mysql:
image: mysql:5.5
ports:
- "3306:3306"
environment:
- MYSQL_USER=xxxxx
- MYSQL_PASSWORD=xxxxxx
- MYSQL_ROOT_PASSWORD=xxxxxx
- MYSQL_DATABASE=xxxxxx
drupal:
image: drupal:8.0.4
links:
- mysql
ports:
- "8080:80"
9条答案
按热度按时间zzoitvuj1#
我花了太多时间让它工作。以下是我的发现。
像OP一样,我从来没有让drush镜像在本地Docker网络上工作,所以对我来说,通过composer将drush与drupal镜像捆绑在一起似乎更简单(参见下面的Dockerfile)。
这在某种程度上是可行的,如果你在容器中执行,你可以运行drush status,但它不会连接到mysql服务器。这有两个原因:
1.需要mysql-client包来远程连接数据库(因为我们在本地Docker网络上运行它)。
这是我的Dockerfile:
重要的包是
curl
(显然)和mysql-client
。以下是docker-compose.yml的相关部分:
为什么显式设置主机名有效
上面的第二个问题特别可怕,因为drush使用settings.php中的配置连接到mysql。但是数据库数组中的“host”键显然被drupal和drush解释得不同。以下是
settings.php
的相关部分:'host' => 'mysql'
后面的注解行是之前从另一个SO答案中提取的尝试,并说明了问题,drush使用命令行服务器API,这与drupal使用的不同。备用主机名是正在运行的容器的哈希ID,可以通过运行sql(例如从phpmyadmin)找到:SHOW VARIABLES WHERE Variable_name = 'hostname'
(取自this)这个值在容器每次更新时都会改变,所以为了使它持久化,主机名在上面的
docker-compose.yml
,se中显式声明。编辑:我做了一个小项目来托管一个drupal + drush + phpmyadmin开发环境,基于这个:https://github.com/glaux/drupal8docker
zi8p0yeb2#
与Docker一样,使用Drush有很多选择。但是请注意,为了让drush访问数据库(例如mysql),Drupal上的mysql容器中应该有卷,例如:
以下是最常见的。
1)将本地drush挂载到Drupal容器:
2)创建一个data only docker image for drush并将可执行文件卷到您的Drupal容器中。参见www.example.com上的示例https://github.com/RobLoach/drush-docker/issues/32#issuecomment-222321265。
3)在Drupal容器运行后安装Drush。例如:
4)通过创建Docker镜像(使用Dockerfile)在Drupal上安装Drush。范例:
5)使用docker-compose. yml将another container与drush和volume it合并到Drupal container中。范例:
holgip5t3#
为了使Drush有效地工作-您最好从运行Drupal的容器中运行它。为此,在Dockerfile中添加一行代码。
对于实际使用,您最好从容器和主机(通过公钥SSH)中提供单独的Drush别名供使用。作为一个示例,查看这些别名并将整个设置视为参考实现:https://github.com/srijanaravali/docker-blueprint/blob/master/docker-utils/drush/local.aliases.drushrc.php
您可以通过在Dockerfile中添加这样的内容将这些别名传输到容器中:
或者-为了与主机共享控制,您可以考虑将其挂载为docker-compose. yml中的卷。
你现在可以像这样在容器上运行Drush命令:
docker exec drush @alias <command>
。当然,你可以把别名打成不那么键盘密集的东西。或者,通过调用您提供的SSH别名-
drush @alias-ssh <command>
,从您的主机使用drushpcww981p4#
Drupal 8 - Docker - Drush组合的解决方案之一是:
1.步骤:将Drush安装在Apache服务器的镜像中,让我们将这个Docker镜像称为“php5”。
1.步骤:在~/.bashrc文件中创建一个别名,如下所示:
在这个别名中,我使用Docker composer,但它与简单的Docker相同,您在php5镜像上运行Drush命令,指定Drush在Docker中的位置以及代码库在Docker中的位置。这样你就可以像这样使用它:
对于该高速缓存rebuild命令,在本地代码目录中。
pxy2qtax5#
试试https://github.com/wodby/docker4drupal。对我来说,用Docker开发Drupal是非常有用和灵活的。
nukf8bse6#
我认为你有两个选择,你可以单独运行
drush/drush
容器,并使用一个共享的保持卷,这样它就可以访问drupal将要使用的文件。或者你可以构建一个包含drush和drupal的新图像。参见https://docs.docker.com/engine/userguide/containers/dockerimages/
您可以使用Dockerfile作为drush图像和drupal图像的指导。
wfsdck307#
我选择做的是将它安装到我的
web
容器中。首先,我安装composer,然后我需要在我想要的目录中安装Drush。
Dockerfile示例:
如果Drush已经是你项目的composer.json中的一个依赖项,你可以
composer install
它。e5njpo688#
最好的选择是基于你的实际容器创建你自己的镜像,包括你想要的所有更改,比如drush,nano,Vim等,并将它们推送到你自己的docker repo中。要做到这一点,请遵循以下步骤:https://www.scalyr.com/blog/create-docker-image/https://ropenscilabs.github.io/r-docker-tutorial/04-Dockerhub.html
cig3rfwq9#
将Docker与Drupal和Drush一起使用是建立、管理和开发Drupal项目的有效方法。Docker允许您为Drupal环境创建隔离的容器,从而可以轻松复制和共享开发环境。以下是关于如何将Docker与Drupal和Drush一起使用的分步指南:
1.安装Docker:
2.创建Docker Compose文件:
docker-compose.yml
文件,其结构如下:这个
docker-compose.yml
文件定义了两个服务:一个用于Drupal,一个用于MySQL。它为Drupal示例设置必要的环境变量和卷。3.启动容器:
此命令将在后台创建并运行Drupal和MySQL容器。
4.访问Drupal站点:
http://localhost:8080
。您应该看到Drupal安装页面。5.完整安装Drupal:
docker-compose.yml
文件中定义的MySQL数据库凭据。6.安装Drush:
然后,在容器内安装Drush:
7.使用Drush:
8.停止并移除容器:
这将停止并删除容器,但存储在
./app
目录中的应用程序数据将保留。通过遵循这些步骤,您可以为Drupal设置一个基于Docker的开发环境,使您能够有效地处理Drupal项目并促进与他人的协作。Docker的隔离性和可移植性使其成为管理Drupal站点及其依赖项的强大工具。