Estou tentando ver se consigo executar o systemd dentro de um contêiner do docker (que está executando o arch linux no contêiner).
Inicio o docker com todos os recursos e vinculo mount no cgroups:
docker run -it --rm --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro ..
no entanto, se eu tentar executar o binário systemd:
Trying to run as user instance, but the system has not been booted with systemd.
Tentando descobrir como iniciar as coisas corretamente para iniciar o systemd.
arch-linux
docker
systemd
Michael Neale
fonte
fonte
systemd
página de manual seria um bom lugar para começar. O Google também produz vários artigos sobre a execução do systemd no docker.Respostas:
Para executar o systemd em um contêiner do Docker, o sistema host também deve executar o systemd. Isso significa que você não pode usar o Ubuntu como host. No momento, as únicas distribuições de host que conheço desse trabalho são o Fedora (que, diferentemente do Ubuntu, tem a versão mais recente do Docker) ou o RHEL 7.
fonte
Aqui está minha principal dica: D executando o systemd dentro de um contêiner de docker com o ubuntu: D Eu tenho o Ubuntu trabalhando com o systemd dentro do docker
Repositório do GitHub para meu contêiner docker-systemd
Resultado:
fonte
Atualmente, o systemd não funciona corretamente em um contêiner de docker, devido a um conjunto de razões, ou seja, à falta dos privilégios corretos. Você pode ler sobre isso em uma variedade de problemas do github no projeto do docker, como executar systemd dentro de travamentos do container docker arch ou segfaults e problemas relacionados ao monitoramento de processo / inicialização. (Gostaria de vincular mais problemas aqui, mas não posso, pois aparentemente não tenho reputação suficiente).
Como você pode ver, este é um tópico que está sendo trabalhado no momento e alguns patches já foram mesclados para melhorar o comportamento, para que possamos esperar que isso funcione em breve.
Aparentemente, alguns desenvolvedores já conseguiram executá-lo em sistemas fedora, como documentaram em seu blog .
fonte
Você pode executar o systemd dentro de um contêiner de docker. O sistema operacional host não importa, embora você precise montar o volume / sys / fs / cgroup do host. Eu consegui funcionar seguindo este guia: http://developerblog.redhat.com/2014/05/05/running-systemd-within-docker-container/
fonte
/sys/fs/cgroup
que você mencionou).Eu pude trabalhar de trás para frente com isso: https://registry.hub.docker.com/u/codekoala/arch/
O Docker 1.1 facilita isso, pois o groups (ro) já é fornecido em contêineres - ainda preciso de acesso privado para criar montagens PrivateTmp, mas, caso contrário, desde que você especifique o cmd a ser executado como o binário systemd - ele funciona bem.
fonte
Encontrei esta pergunta ao tentar fazer isso no contêiner oficial debian: 8. Para qualquer outra pessoa que tente fazer isso no contêiner oficial debian: 8 (debian: jessie), a resposta do @ Frank-from-DSPEED funciona com uma pequena modificação, conforme descrito em um post antigo do git hub :
Em seguida, no contêiner:
Isso funciona perfeitamente para mim e, como esse é apenas um ambiente de desenvolvimento, o problema de segurança não importa para mim.
Nota: O comando / sbin / init faz com que / sbin / init seja o Processo 1, que é uma parte essencial para fazer esse trabalho.
fonte
systemctl show-environment
reutrns para mimFailed to get D-Bus connection: Unknown error -1
. Quando eu iniciar o recipiente com uma--privileged
bandeira em vez de--cap-add SYS_ADMIN
(docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name=ubuntu_systemd_test debian:jessie /sbin/init
) responde systemctl como de costumeA partir de 2018, isso agora funciona para mim:
docker run -it -e container=docker
your-image-name/sbin/init
No entanto, isso não fornecerá um shell, portanto, você deverá primeiro habilitar algum serviço systemd (por exemplo, sshd) dentro da imagem, se isso ainda não tiver sido feito, para fazer algo útil.
fonte