I am running into some trouble with drush I can't pm-enable the modules I just downloaded with it. I did some research but none of the solution worked for me, most cases involved switching "localhost" to "" in settings.php but my database is located on a docker container. I am running drush from the root folder.

Here the output I get when running drush en module1, module2

    root@c4765ef094a2:/var/www/html# drush en pathauto, token, 
    simple_gmap, addtoany, scheduler, devel, devel_generate
    Command pm-enable needs a higher bootstrap level to run - you will 
    need to invoke drush from a more functional   [error]
    Drupal environment to run this command.
    The drush command 'en pathauto, token, simple_gmap, addtoany, 
    scheduler, devel, devel_generate' could not be     [error]
    Drush was not able to start (bootstrap) the Drupal database.                                                     
    Hint: This may occur when Drush is trying to:
     * bootstrap a site that has not been installed or does not have a 
    configured database. In this case you can
    select another site with a working database setup by specifying the 
    URI to use with the --uri parameter on the
    command line. See `drush topic docs-aliases` for details.
     * connect the database through a socket. The socket file may be 
    wrong or the php-cli may have no access to it in
    a jailed shell. See http://drupal.org/node/1428638 for details.

    Drush was attempting to connect to: 
     Drupal version         :  8.4.0                                                                                
     Site URI               :  http://default                                                                       
     Database driver        :  mysql                                                                                
     Database hostname      :  mariadb                                                                              
     Database port          :  3306                                                                                 
     Database username      :  root                                                                                 
     Database name          :  drupal                                                                               
     PHP executable         :  /usr/local/bin/php                                                                   
     PHP configuration      :                                                                                       
     PHP OS                 :  Linux                                                                                
     Drush script           :  
     Drush version          :  8.1.15                                                                               
     Drush temp directory   :  /tmp                                                                                 
     Drush configuration    :                                                                                       
     Drush alias files      :                                                                                       
     Drupal root            :  /var/www/html                                                                        
     Drupal Settings File   :  sites/default/settings.php                                                           
     Site path              :  sites/default                                                                        
     Sync config path       :  sites/default/files/config_oL5MBo-

Here's the output of drush sql-connect

mysql --user=root --password=root --database=drupal --host=mariadb --

I have been stuck on this for 2 hours so any help would be greatly appreciated

  • 1
    Only odd thing I can see is that the db hostname is mariadb. Is you DB on a different server and can this name be pinged from the command line? – CG Monroe Nov 6 '17 at 15:35
  • Did you try to execute the command from inside web directory? – forethought Nov 6 '17 at 16:44
  • You need to double check your host, since it's set to mariadb in your settings file, instead of localhost. – kenorb Nov 6 '17 at 23:26

I prefer to use drush from drush alias files, so that the magic of Drush figuring out everything from the document root isn't so magical and you can sometimes more easily debug issues from a proper drush alias file.

As others mention it's likely the database connection that's not working. In docker you can use the --add-host build option, or the extra_hosts docker-compose options to give a name to your database container (docker can use the container name to properly create the /etc/hosts entry at runtime).

See this stackexchange answer https://stackoverflow.com/a/38306666/1491507

By following the above directions in docker-compose an entry such as the following that creates a named hosted in /etc/hosts as my_resolved_db_service which is magically resolved to the mariadb container.

  - "my_resolved_db_service:mariadb"

Then in a drush alias file, or when installing drupal via drush you would use the /etc/host name created: drush si --db-url=mysql://root:root@my_resolved_db_service/drupal as an example.

  • If the containers are linked in docker-compose it is not required to use the extra_hosts option. Am I wrong about it? This is how it is working on my Docker stack – rreiss Nov 7 '17 at 5:50
  • Working where? MySQL may work via docker config files, but Drush is invoked via php and it has no knowledge of the underlying system unless told through php.ini, drushrc.php, an drush alias file or settings.php ... – tenken Nov 7 '17 at 5:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.