GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann Docker in einem Linux-Container ausgeführt werden?

Ja, es ist möglich. Sie können jedoch keine aufs-Partition in aufs verschachteln. Sie müssen ein anderes System mounten oder ein anderes Speicher-Backend verwenden.

Sie können sich das Makefile des Dockers und hack/dind ansehen . Dazu benötigen Sie den privilegierten Modus.

Am einfachsten versuchen Sie es mit make shell und sobald Sie sich im Container befinden, können Sie einen neuen Docker-Daemon starten :)

EDIT:Ich habe Koding ausprobiert und es ist tatsächlich nicht möglich. Sie sind in ihrem Container nicht privilegiert, sodass Sie keinen neuen Docker starten können.


Ja, Docker kann in einem Linux-Container ausgeführt werden.

Aber Docker läuft nur mit dem lxc Ausführungstreiber und in einem unconfined lxc.

So erhalten Sie Docker in LXC:

  1. Stellen Sie sicher, dass Sie lxc.aa_profile = lxc-container-default-with-nesting haben (Wenn es nicht funktioniert oder Sie dieses Profil nicht haben, versuchen Sie es mit lxc.aa_profile = unconfined ) im config Datei Ihres LXC, um sicherzustellen, dass sie nicht durch apparmor blockiert wird . Für weitere Informationen besuchen (oder ändern) Sie die Dateien in /etc/apparmor.d/lxc .

  2. Sie müssen lxc in Ihrem Container installieren. Wenn Sie beispielsweise unter Ubuntu arbeiten, führen Sie den Container apt-get install lxc aus .

  3. Stellen Sie sicher, dass der Docker-Daemon mit --exec-driver=lxc aufgerufen wird Parameter. Sie können es vorher testen, indem Sie manuell docker -d --exec-driver=lxc eingeben . Um in Ubuntu das Argument beim Start zu verwenden, bearbeiten Sie einfach /etc/default/docker und vergewissern Sie sich, dass Sie die Zeile:

    haben
DOCKER_OPTS="--exec-driver=lxc"

Folgen Sie diesem Thread für Updates:https://github.com/docker/docker/issues/6783

Wenn Sie Fehler beheben müssen:

  • Behalten Sie apparmor im Auge logs in den Kernlogs des Hosts.
  • starte docker -d ... manuell, um Ausgaben zu erhalten.

Hinweis:Sie haben möglicherweise keine Hand auf dem Host, um das LXC-Apparmor-Skript auf Koding zu ändern, indem Sie die Antworten anderer beurteilen. Trotzdem bleibt dieses Howto von Interesse, wenn Sie der LXC-Anbieter sind, und es beantwortet die allgemeinere Frage, die Sie in Ihrem gestellt haben Fragetitel und das könnte Leute in allgemeineren Szenarien anziehen (so wie ich).


Und hier ist eine vollständige Anleitung für alle anderen im selben Boot.

Starten Sie ein Terminal und beginnen Sie mit der Eingabe von..

docker run -i -t --privileged -v /var/lib/docker ubuntu bash
apt-get update && apt-get install -y docker.io
service docker.io start
ln -s /usr/bin/docker.io /usr/local/bin/docker
docker run -i -t ubuntu bash

Jetzt sollten Sie sich in einem Container in einem anderen Container befinden.

Bemerkungen:

  1. Das Flag --privileged wird auf dem Außenbehälter benötigt, um dies zu erreichen.
  2. Sie MÜSSEN -v /var/lib/docker verwenden um die von Crack erwähnte Einschränkung zu vermeiden.
  3. ln -s /usr/bin/docker.io /usr/local/bin/docker erstellt nur einen symbolischen Link, damit wir docker eingeben können statt docker.io

Linux
  1. Wie führe ich einen Befehl in einem laufenden Systemd-Container aus?

  2. Wie führe ich ein Programm in einem Docker-Container aus?

  3. So führen Sie MySQL in einem Docker-Container aus

  4. Installieren von netstat auf Docker-Linux-Container

  5. Zertifikat kann nicht gelesen werden, wenn es im Linux-Docker-Container ausgeführt wird – funktioniert unter Windows

So führen Sie Nginx in einem Docker-Container aus:Eine Schritt-für-Schritt-Anleitung

Ausführen von Almalinux oder Rocky Linux 8 Docker-Container mit Systemd (systemctl)

So führen Sie PHPMyAdmin in einem Docker-Container aus

So führen Sie Grafana in einem Docker-Container aus

So führen Sie Docker-Container aus

So führen Sie einen Cron-Job in einem Docker-Container aus