web-dev-qa-db-fra.com

Comment utiliser un alias drush pour me connecter à un conteneur Docker?

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).
3
crobicha

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.

2
Justin Levi Winter