Não é possível atribuir endereço dentro de um contêiner Docker

2

Eu quero usar o pacote rsub para o texto sublime, a fim de editar o código dentro de um contêiner Docker que é executado em um controle remoto servidor. No entanto, quando eu executo

rsub my_code.py

Eu recebo o erro:

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

A linha 392 basicamente corresponde a esta instrução:

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

Se eu sair do contêiner do Docker e executar a mesma instrução no servidor remoto, ele funcionará bem (ou, pelo menos, não fornecerá mensagens de erro). Você pode me ajudar a resolver esse problema? Eu posso modificar o Dockerfile, se necessário. Eu também posso postar aqui se você acha que é necessário, mas eu deveria medicar um pouco antes de remover informações confidenciais.

EDITAR : incluo a parte do script rsub que gera o erro. Observe que, neste ponto do script, $host=localhost e $port=52698 . Eu verifiquei isso com echo declarações.

# 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 : Fui questionado sobre o sistema operacional host. Este é o resultado de uname -a quando no host remoto e fora do contêiner do Docker (nome do servidor removido):

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

e este é o resultado do mesmo comando quando executado dentro do contêiner do 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 e yyyyyyy são strings diferentes. Além disso, quando dentro do contêiner do Docker, não consigo encontrar nenhum diretório tcp dentro do diretório dev :

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

1 resposta

2

No final, como rsub estava funcionando no host remoto, a solução mais simples era:

  • faça logon no host remoto (sem iniciar o contêiner)
  • use rsub para editar quaisquer arquivos no host remoto, em uma sessão do Sublime no meu pc local
  • crie o contêiner novamente.

É um pouco lento, porque cada vez que faço alterações preciso reconstruir, mas:

  • o host remoto tem muito poder computacional, então a reconstrução é rápida;
  • é uma maneira melhor de trabalhar de qualquer maneira: cada vez que eu fizer alterações no projeto, devo reconstruir o contêiner de qualquer maneira. Isso me leva a cometer alterações com mais frequência, o que é sempre uma boa ideia: -)
por DeltaIV 18.05.2018 / 19:45