Escrevi alguns scripts para gerenciar contêineres LXC e posso obter seus endereços IP via ifconfig, assumindo que estou conectado ao console.
Agora eu quero conectar a esses contêineres via ssh. Como obtenho o endereço IP deles para que eu possa escrever um script? Também não quero definir os endereços manualmente (mas farei isso, se essa for a única opção).
Até agora, tentei usar lxc-start
, mas a máquina não possui um endereço IP antes de executar /sbin/init
.
Respostas:
A maneira mais fácil de fazer isso agora é:
Isso retorna o endereço IP sem nenhum outro texto.
A
-i
opção especifica que o endereço IP deve ser retornado e a-H
opção desativa a saída legível por humanos, ou seja, rótulos. Para mais informações consulte o LXC-info página homem .EDIT para a versão mais recente do LXC:
lxc info container-name
Então você obtém informações detalhadas. Veja o bloco "Ips:", que deve se parecer com o abaixo. Você pode escolher o primeiro endereço IPv4 (
10.121.48.241
) neste caso:fonte
Como a execução de coisas em contêineres não parece ser suportada no Ubuntu, minha próxima melhor sugestão é examinar as concessões de endereços IP que
dnsmasq
estão sendo distribuídas. Isso é realmente simples:Existem apenas duas partes úteis para que possamos formatar isso muito melhor:
fonte
lxc-ls --fancy
.dnsmasq.lxcbr0.leases
Tecnicamente falando, você deve poder se
lxc-attach
conectar e disparar em um comando (e processar a saída), da seguinte maneira:Isso requer que o contêiner esteja em execução.
Nota: Não consegui fazer isso funcionar. Eu instalei o LXC e tentei isso, mas só vi um monte de erros de espaço para nome, arquivos ausentes e outras bobagens. Mas minha única experiência com o LXC são os 10 minutos que gastei nessa questão. Pode funcionar. Talvez não. Boa sorte!
fonte
ifconfig eth0 | grep -Eo 'addr:[0-9.]+' | cut -d: -f2
apenas o endereço IP.No such file or directory - failed to open '/proc/28741/ns/pid'
efailed to enter the namespace
. Eu encontrei um erro que descreve o problema com precisão, mas é a partir de 2010.Isso funciona no Ubuntu 14.04:
e se você quiser apenas o endereço IP (útil para scripts), (obrigado @JulianHLam):
fonte
lxc-info -n $name -Hi
para obter apenas o IP sem espaços extranneousOu consulte dnsmasq (que fornece IPs para os contêineres)
fonte
Versão do Python para fazer isso:
fonte
O comando abaixo substitui o
lxc-attach
exemplo na postagem anteriorÉ executado
ifconfig
dentro do contêiner e mostra a saída.Parece que algo não está configurado corretamente. Como solução alternativa, usei o modelo de configuração predefinido fornecido pela documentação do LXC para fazê-lo funcionar sem maiores investigações.
fonte
Se você estiver executando o LXD, poderá achar este comando útil para obter o endereço IP de um contêiner em execução
fonte
sudo lxc-ls --fancy -F ipv4 $my_container_name | tail -1
fonte
Deixe o dnsmasq fazer isso por você.
Configure a instância dnsmasq da máquina host para consultar a instância dnsmasq do lxc para o domínio de nível superior .lxc.
Em / etc / default / lxc-net, remova o comentário desta linha:
Se a instância dnsmasq do seu host for iniciada pelo NetworkManager (como é o caso das instalações de desktop Ubuntu atuais), crie um arquivo chamado /etc/NetworkManager/dnsmasq.d/lxc.conf com esta linha dentro:
Se o dnsmasq do seu host for iniciado por algo diferente do NetworkManager, adicione essa linha ao /etc/dnsmasq.d-available/lxc:
Em seguida, reinicie as coisas para que elas captem as alterações:
Pode ser necessário reiniciar seus contêineres lxc ou fazê-los solicitar novas concessões DHCP antes que eles apareçam no DNS. (Não me lembro se era necessário quando fiz isso.) Também vale a pena mencionar que vi um relatório de erro sobre o lxc-net não captar as alterações do dnsmasq quando ele foi reiniciado, portanto, você pode querer reiniciar o sistema host apenas para ter certeza.
Então tente:
fonte
Resposta simples é
Se você não se lembra do container_name, digite sudo lxc-ls -f.
fonte