GNU/Linux >> Znalost Linux >  >> Linux

Může docker běžet uvnitř linuxového kontejneru?

Ano, je to možné. Nemůžete však mít oddíl aufs vnořený do aufs. Musíte připojit jiný systém nebo použít jiný backend úložiště.

Můžete se podívat na makefile dockeru a hack/dind . K tomu potřebujete privilegovaný režim.

Nejjednodušší způsob, jak to zkusit, je udělat make shell a jakmile budete v kontejneru, můžete spustit nového démona dockeru :)

EDIT:Zkoušel jsem Koding a opravdu to není možné. V jejich kontejneru nemáte oprávnění, takže nemůžete spustit nový docker.


Ano, docker může běžet v linuxovém kontejneru.

Docker však poběží pouze s lxc exekuční ovladač a v neomezeném lxc.

Zde je návod, jak získat docker v LXC:

  1. Ujistěte se, že máte lxc.aa_profile = lxc-container-default-with-nesting (pokud to nefunguje nebo tento profil nemáte, zkuste lxc.aa_profile = unconfined ) v config souboru vašeho LXC, abyste zajistili, že nebude blokován apparmor . Pro více informací navštivte (nebo upravte) soubory v /etc/apparmor.d/lxc .

  2. Musíte nainstalovat lxc do svého kontejneru. Pokud jste například pod ubuntu, spusťte v kontejneru apt-get install lxc .

  3. Ujistěte se, že démon docker je volán s --exec-driver=lxc parametr. Předtím si to můžete vyzkoušet ručním zadáním docker -d --exec-driver=lxc . V ubuntu, aby byl argument použit při spuštění, jednoduše upravte /etc/default/docker a ujistěte se, že máte řádek:

DOCKER_OPTS="--exec-driver=lxc"

Aktualizace najdete v tomto vláknu:https://github.com/docker/docker/issues/6783

Pokud potřebujete vyřešit problém:

  • sledujte apparmor se přihlásí do protokolů jádra hostitele.
  • spusťte docker -d ... ručně získat výstupy.

Poznámka:Možná nemáte od hostitele možnost upravit skript LXC apparmor na Koding posouzením odpovědí ostatních, každopádně tento návod zůstává zajímavý, pokud jste poskytovatelem LXC, a odpovídá na obecnější otázku, kterou jste položili ve svém název otázky a to by mohlo přilákat lidi v obecnějších scénářích (jako jsem byl já).


A zde je úplný průvodce pro kohokoli jiného na stejné lodi.

Spusťte terminál a začněte psát..

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

Nyní byste měli být uvnitř kontejneru v jiném kontejneru.

Poznámky:

  1. Příznak --privileged K tomu je potřeba na vnější nádobě.
  2. MUSÍTE použít -v /var/lib/docker abyste se vyhnuli omezení uvedenému vrzáním.
  3. ln -s /usr/bin/docker.io /usr/local/bin/docker právě vytváří symbolický odkaz, abychom mohli napsat docker místo docker.io

Linux
  1. Jak zjistit, zda proces běží uvnitř lxc/Docker?

  2. Jak poslat signál ke spuštění programu v kontejneru dockeru?

  3. Co je uvnitř obrázku/kontejneru Dockeru?

  1. Jak přidat uživatele do kontejneru Docker?

  2. Jak spustit úlohu cron uvnitř kontejneru dockeru

  3. Nelze přečíst certifikát při spuštění v kontejneru Linux Docker - funguje ve Windows

  1. Jak nainstalovat a nastavit Docker Container na Rocky Linux 8

  2. Jak spustit příkaz uvnitř spuštěného kontejneru Systemd?

  3. Odlehčené izolované linuxové prostředí