2014-10-07 17 views
25

Używam kontenera dokera do budowania i wdrażania mojego oprogramowania do kolekcji ec2. W skrypcie wdrażania buduję moje oprogramowanie, a następnie pakuję je w obraz dokowany. Obraz jest przesyłany do mojego prywatnego rejestru, ciągnięty przez moje ek2 produkcyjne, a następnie uruchamiany. Zasadniczo będę musiał uruchomić docker w kontenerze dokowania.Uruchamianie okna dokowanego wewnątrz kontenera dokowanego?

Problem polega na tym, że nie mogę uruchomić okna dokowanego na moim kontenerze. Gdy próbuję

service docker start 

uzyskać

bash: service: command not found 

A jeśli staram

docker -d 

uzyskać

2014/10/07 15:54:35 docker daemon: 0.11.1-dev 02d20af/0.11.1; execdriver: native; graphdriver: 
[e2feb6f9] +job serveapi(unix:///var/run/docker.sock) 
[e2feb6f9] +job initserver() 
[e2feb6f9.initserver()] Creating server 
2014/10/07 15:54:35 Listening for HTTP on unix (/var/run/docker.sock) 
[error] attach_loopback.go:42 There are no more loopback device available. 
loopback mounting failed 
[e2feb6f9] -job initserver() = ERR (1) 
2014/10/07 15:54:35 loopback mounting failed 

Komenda usługa nie istnieje na pojemniku Döcker więc nie mogę uruchomić okna dokowanego. Nie jestem pewien, co powinienem teraz zrobić, aby uruchomić dokowanie, więc jestem trochę utknięty, każda pomoc jest doceniana.

Trochę więcej informacji

hosta działa Fedora 20 (ostatecznie zostanie uruchomiony amazon Linux na EC2)

dokowanym pojemnik działa CentOS 7,0

hosta działa Docker wersja 1.2. 0, budować fa7b24f/1.2.0

Container pracuje doker-0.11.1-22.el7.centos.x86_64

+0

Czy istnieje powód do biegania CentOS/docker 0,11 w pojemniku? Jeśli jest dedykowany do uruchamiania Dockera, możesz użyć CoreOS lub czegoś podobnego. – naneau

+0

Kontener centos nie jest w całości przeznaczony do uruchamiania okna dokowania, prawie wszystkie jego zadania są związane z budowaniem i testowaniem oprogramowania. Wszystko, co robimy, działa dobrze na centach, więc mieliśmy nadzieję, że będziemy mogli nadal używać centów w pojemniku. –

+1

Myślę, że "Docker way" nadal będzie spin oddzielny pojemnik. Kontenery są naprawdę dostosowane do uruchamiania pojedynczej aplikacji. Nie mają one zastąpić zadań lepiej wykonywanych przez maszynę wirtualną. Jeśli masz złożony stos, który ma wiele zadań, może pomóc rozdzielić niektóre z tych zadań na osobne kontenery. Przykładem takiego zadania byłoby uruchomienie innych kontenerów Docker. – naneau

Odpowiedz

37

Jak o nie uruchamiając "doker wewnątrz dockera" i uruchamiając okno dokowane na hoście, ale z poziomu kontenera dokera? Wystarczy zamontować docker.sock i dokowanym binarny:

docker run -v /var/run/docker.sock:/run/docker.sock -v $(which docker):/bin/docker [your image]

https://github.com/sameersbn/docker-gitlab używa tego podejścia do rozpędzają pojemników Döcker, spojrzeć na ten obraz.

Można również spojrzeć na: https://registry.hub.docker.com/u/mattgruter/doubledocker/

UPDATE lipca 2016

Najbardziej aktualna podejściem jest użycie docker:dind obrazu, jak opisano tutaj: https://hub.docker.com/_/docker/

Krótkie podsumowanie:

$ docker run --privileged --name some-docker -d docker:dind

, a następnie: $ docker run --rm --link some-docker:docker docker info

+1

-v $ (który dokowanie):/bin/docker trick działał dla mnie, gdy wyświetlałem obrazy ubuntu na hostach ubuntu, ale nie działał na hoście gentoo - więc wolę zainstalować dokowanie w kontenerze i tylko mapować plik gniazda – ISanych

+1

Jaki jest sens montażu gniazda dokera wewnątrz kontenera, gdy wszystko dzieje się na hoście, a nie w kontenerze. – SummerBreeze

+0

Cóż, głównie dlatego, że to nie "wszystko" dzieje się na hoście. Zobacz przykład docker-gitlab. – cthulhu

3

ile w prawie wszystkich przypadkach proponuję następującą odpowiedź @ Cthulhu i nie Running „docker w docker”, w przypadkach, kiedy musi (npzestaw testowy, który testuje przed stwardnieniem wersji Döcker), użyj następujących czynności, aby utworzyć dodatkowe urządzenia pętli zwrotnej:

#!/bin/bash 

for i in {0..6} 
do 
    mknod -m0660 /dev/loop$i b 7 $i 
done 

(Zrobione z wątku na Döcker Issue #7058)

2

może po prostu uruchomić docker wewnątrz pojemnika Döcker korzystania dind. Spróbuj tego obrazu z Jerome, co następuje:

docker run --privileged -t -i jpetazzo/dind

sprawdzać tę stronę po więcej szczegółów:
https://github.com/jpetazzo/dind

Powiązane problemy