web-dev-qa-db-fra.com

Impossible d'affecter une adresse dans un conteneur Docker

Je souhaite utiliser le package rsub pour Sublime Text, afin d’éditer du code dans un conteneur Docker fonctionnant sur un serveur distant. Cependant quand j'exécute

rsub my_code.py

Je reçois l'erreur:

/usr/local/bin/rsub: connect: Cannot assign requested address
/usr/local/bin/rsub: line 392: /dev/tcp/localhost/52698: Cannot assign requested address

La ligne 392 correspond fondamentalement à cette instruction:

exec 3<> "/dev/tcp/localhost/52698"
bash: connect: Cannot assign requested address
bash: /dev/tcp/localhost/52698: Cannot assign requested address

Si je quitte le conteneur Docker et exécute la même instruction sur le serveur distant, cela fonctionne bien (ou du moins, cela ne me donne aucun message d'erreur). Pouvez-vous m'aider à résoudre ce problème? Je peux modifier le fichier Docker si nécessaire. Je peux aussi le poster ici si vous pensez que c'est nécessaire, mais je devrais le dire un peu avant de supprimer les informations sensibles.

EDIT: j'inclus la partie du script rsub qui génère l'erreur. Notez qu'à ce stade du script, $Host=localhost et $port=52698. Je vérifiai cela avec les déclarations echo.

# connect to textmate and send command
#
exec 3<> "/dev/tcp/$Host/$port"

if [ $? -gt 0 ]; then
    echo "Unable to connect to TextMate on $Host:$port"
    exit 1
fi

read -r server_info 0<&3

log $server_info

for i in "${!filepaths[@]}"; do
    open_file "$i"
done

echo "." 1>&3

if [[ $nowait = true ]]; then
    exec </dev/null >/dev/null 2>/dev/null
    ( (handle_connection &) &)
else
    handle_connection
fi

EDIT: On m'a posé des questions sur le système d'exploitation hôte. Ceci est le résultat de uname -a sur l'hôte distant et à l'extérieur du conteneur Docker (nom du serveur supprimé):

Linux xxxxxxx 4.4.0-104-generic #127-Ubuntu SMP Mon Dec 11 12:16:42 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

et c'est le résultat de la même commande quand run dans le conteneur Docker:

Linux yyyyyyyyy 4.4.0-104-generic #127-Ubuntu SMP Mon Dec 11 12:16:42 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

xxxxxxx et yyyyyyy sont des chaînes différentes. De plus, lorsque je suis dans le conteneur Docker, je ne trouve aucun répertoire tcp dans le répertoire dev:

root@7f199087c883:~# ls /dev/tcp
ls: cannot access '/dev/tcp': No such file or directory
3
DeltaIV

En fin de compte, puisque rsub travaillait sur l'hôte distant, la solution la plus simple consistait à:

  • se connecter à l'hôte distant (sans démarrer le conteneur)
  • utilisez rsub pour éditer n’importe quel fichier sur l’hôte distant, dans une session de Sublime sur mon PC local
  • puis reconstruisez le conteneur.

C'est un peu lent, car chaque fois que je fais des changements, je dois reconstruire, mais:

  • l'hôte distant dispose de beaucoup de puissance de calcul, la reconstruction est donc rapide;
  • de toute façon, c’est une meilleure façon de travailler: chaque fois que je mets des modifications à apporter au projet, je devrais quand même reconstruire le conteneur. Cela me pousse à appliquer des modifications plus souvent, ce qui est toujours une bonne idée :-)
3
DeltaIV