J'ai une configuration de gouttelettes sur Digital Ocean avec deux conteneurs docker, un pour Drupal (en utilisant l'image modifiée Alpine-drupal8 )) et un autre exécutant un simple serveur mysql.
Je peux exécuter des commandes drush sur ce conteneur en me connectant via ssh dans la droplet et en exécutant docker exec -it <container_name> /bin/sh
J'ai également mis en place un serveur ssh (écoutant sur le port 2222 sur la même adresse IP) sur le conteneur lui-même avec un peu de redirection de port:
ssh root@<droplet_ip> -p 2222 # Connects from remote dev machine to drupal container using ssh key
Fichier Mes sites/default/drush/aliases.drushrc.php:
<?php
$aliases['container'] = array(
'root' => '/usr/share/nginx/html',
'uri' => 'http://default',
'path-aliases' =>
array (
'%drush' => '/usr/local/bin/drush',
'%site' => 'sites/default/',
'%files' =>'sites/default/files/',
'%modules' =>'modules/'
),
'remote-Host' => '<droplet_ip>',
'remote-user' => 'root',
'ssh-options' => '-p 2222',
);
?>
Le démarrage d'une session ssh avec l'alias drush fonctionne:
$ drush @container ssh
186203cca:/usr/share/nginx/html# ### Connected to ssh session in droplet
186203cca:/usr/share/nginx/html# which drush
/usr/local/bin/drush
186203cca:/usr/share/nginx/html# drush status
Drupal version : 8.1.8
Site URI : http://default
Database driver : mysql
Database hostname : <removed>
Database port : <removed>
Database username : <removed>
Database name : <removed>
Drupal bootstrap : Successful
Drupal user :
Default theme : <removed>
Administration theme : seven
PHP configuration : /etc/php7/php.ini
PHP OS : Linux
Drush script : /usr/local/bin/drush
Drush version : 8.1.3
Drush temp directory : /tmp
Drush configuration :
Drush alias files :
Install profile : standard
Drupal root : /usr/share/nginx/html
Drupal Settings File : sites/default/settings.php
Site path : sites/default
File directory path : sites/default/files
Temporary file directory path : /tmp
Sync config path : sites/default/files/config_vxs7qxuAqrfCtOXdbGYLvLAIKl1_bN4J_BvmrEn1l1EUIsn4Du_CKck2QWYSmkNDgUVfdZUZVQ/sync
Cependant, je n'arrive toujours pas à exécuter de véritables commandes drush:
$ drush @container status
env: can't execute 'drush': No such file or directory
Ma théorie est que la redirection de port ne fonctionne pas correctement et que drush essaie de s'exécuter sur le conteneur, pas sur la gouttelette
Cela peut être lié à mon problème: Pourquoi drush dit-il "commande introuvable" lorsque j'essaie d'exécuter des commandes à distance?
Mise à jour:
Un peu plus de tests et j'ai découvert que je peux utiliser la console drupal sans problème, il semble donc que cela soit isolé pour drush uniquement:
$ drupal @container cr all
Rebuilding cache(s), wait a moment please.
[OK] Done clearing cache(s).
Donc celui-ci m'a aussi jeté un moment ce soir.
Voici ce qui a fini de fonctionner:
$aliases['docker'] = array(
'uri' => 'http://localhost:8080',
'php' => '/usr/bin/php',
'root' => '/var/www',
'remote-user' => 'root',
'remote-Host' => '0.0.0.0',
'ssh-options' => '-p 8022 -o PasswordAuthentication=no -i ~/.ssh/id_rsa',
'path-aliases' =>
array (
'%drush' => '/root/.composer/vendor/drush/drush/drush'
)
);
L'hôte distant de 0.0.0.0 a fini par faire l'affaire. Semble que si vous utilisez localhost ou 127.0.0.1 drush n'essaye pas réellement de ssh.