2

I am running into some trouble with drush pm-enable: I cannot enable the modules I just downloaded. I did some research but none of the solution worked for me, most cases involved switching localhost to 127.0.0.1 in the settings.php file, but in my case the database server is located on a Docker container. I am running Drush from the root folder.

This the output I get when I run drush en module1, module2.

Command pm-enable needs a higher bootstrap level to run - you will need to invoke drush from a more functional Drupal environment to run this command.
The drush command 'en module1, module2' could not be executed.
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 : /var/www/html/vendor/drush/drush/drush.php
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-2_ALSPTKnAwZb1o3WVs19lndEmQpb4zfSv42kL9A8F0bp4g_demvUvf96DBkH3qyYww/sync

This is the output of drush sql-connect.

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

3
  • 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, 2017 at 15:35
  • Did you try to execute the command from inside web directory? Nov 6, 2017 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, 2017 at 23:26

1 Answer 1

0

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.

extra_hosts:
  - "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.

2
  • 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, 2017 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, 2017 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.