systemctl falhou ao conectar-se ao ubuntu do bus-docker: 16.04 container

38

Estou tentando usar o comando systemctl em um contêiner docker ubuntu:16.04 . Estou executando o seguinte comando ...

systemctl status ssh

No entanto, estou recebendo o erro ...

Failed to connect to bus: No such file or directory

Por que isso não está funcionando? Isso está relacionado ao Ubuntu sendo executado em um contêiner docker? Como posso obter systemctl para funcionar corretamente?

    
por Duncan Gravill 18.08.2016 / 01:19

6 respostas

11

Suponho que você inicie seu contêiner do Docker com algo como

docker run -t -i ubuntu:16.04 /bin/bash

O problema agora é que o seu PID 1 do processo de inicialização é /bin/bash , não systemd. Confirme com ps aux .

Além de que você está perdendo dbus com seria o caminho para se comunicar. É aqui que sua mensagem de erro está vindo. Mas como o seu PID 1 não é systemd, não ajudará a instalar o dbus.

Melhor seria repensar a maneira como você planeja usar a janela de encaixe. Não confie no systemd como um gerenciador de processos, mas tenha o contêiner do docker executando o aplicativo desejado em primeiro plano.

    
por user228505 02.09.2017 / 09:04
6

Outros relataram um problema semelhante. Inicie o terminal e digite:

$ env

Você vê uma variável de ambiente como essa?

XDG_RUNTIME_DIR=/run/user/'id -u'

Onde id -u está entre aspas e não aspas simples. Essa variável é reinterpretada em um número geralmente 1000 para usuários regulares e 0 para superusuário (sudo).

Se a variável de ambiente XDG_RUNTIME_DIR não existir, você precisará criá-la. A discussão completa está em launchpad systemd answer .

    
por WinEunuuchs2Unix 18.08.2016 / 05:57
1

Você pode não estar executando o systemd , que é a implementação padrão do init no 16.04. Se você atualizou de 14.04, você provavelmente ainda está executando o upstart , e o resultado da execução do comando systemctl é a saída que você obteve.

Veja minha resposta em systemctl: comand not found 16.04 server para mais.

    
por Hugh Buntu 30.05.2017 / 05:54
0

Dentro do container docker, eu acho que você pode atualizar o rc.d se você ainda está lutando com o systemd. Eu tentei com update-rd.c e funciona.

    
por NEERAJ SWARNKAR 08.01.2018 / 13:06
0

Tente isto:

docker run -ti -d --privileged=true images_docker  "/sbin/init"

ou

docker run -ti -d --privileged=true images_docker

será o mesmo resultado.

Aqui eu recebo do doc do Docker :

  

Por padrão, os contêineres do Docker são "desprivilegiados" e não podem, por exemplo, executar um daemon do Docker dentro de um contêiner do Docker. Isso ocorre porque, por padrão, um contêiner não tem permissão para acessar nenhum dispositivo, mas um contêiner "privilegiado" recebe acesso a todos os dispositivos (consulte a documentação em dispositivos cgroups).

     

Quando o operador executa a execução do docker - privilegiada, o Docker permitirá o acesso a todos os dispositivos no host, bem como definirá algumas configurações no AppArmor ou no SELinux para permitir que o contêiner tenha quase o mesmo acesso ao host que os processos que estão sendo executados fora dos contêineres no host. Informações adicionais sobre como executar com --privileged estão disponíveis no Blog do Docker.

    
por sonjaya sonjaya 09.05.2018 / 09:42
-1

Eu estava recebendo exatamente o mesmo erro e executei-o com êxito com sudo

sudo systemctl status ssh
    
por Saif 19.01.2018 / 17:29