Istnieją dwa pojemniki A i B. Po uruchomieniu pojemnika A, jeden proces zostanie wykonany, a pojemnik zatrzyma się. Kontener B to tylko aplikacja internetowa (powiedzmy expressjs). Czy możliwe jest kickstart A z pojemnika B?Czy możliwe jest uruchomienie zatrzymanego kontenera z innego kontenera?
Odpowiedz
Istnieje możliwość przyznania kontenerowi dostępu do okna dokowanego, aby mógł on odradzać inne pojemniki na hoście. Można to zrobić poprzez wystawienie gniazdo Döcker wewnątrz pojemnika, np
docker run -v /var/run/docker.sock:/var/run/docker.sock --name containerB myimage ...
Teraz, jeśli masz klienta docker
dostępne wewnątrz pojemnika, będzie w stanie kontrolować demona Döcker na hoście i używać, aby odradz swój "pojemnik A".
Przed próbą takiego podejścia, należy zdawać sobie sprawę ze względów bezpieczeństwa: dostęp do dokowanym jest taka sama jak posiadające root
dostępu na gospodarza, co oznacza, że jeśli aplikacja internetowa posiada zdalne kompromis właśnie wręczył klucze do gospodarz dla atakujących. Jest to opisane dokładniej in this article.
Jest to możliwe po zamontowaniu gniazda dokowania.
Kontener A
Spowoduje wydrukowanie czasu na standardowe wyjście (i jego logi) i wyjście.
docker run --name contA ubuntu date
Pojemnik B
Sztuką jest, aby zamontować gniazdo Döcker gospodarza następnie zainstalować klienta Döcker na pojemniku. Następnie będzie on wchodził w interakcję z demonem, tak jakby używałeś dockera z hosta. Po zainstalowaniu okna dokowanego wystarczy ponownie uruchomić kontener A co 5 sekund.
docker run --name contB -v /var/run/docker.sock:/var/run/docker.sock ubuntu bash -c "
apt-get update && apt-get install -y curl &&
curl -sSL https://get.docker.com/ | sh &&
watch --interval 5 docker restart contA"
Widać, że Contà jest nazywany przez patrząc na jego dzienników
docker logs contA
powiedział, że Docker ma naprawdę na długie usług eksploatacji. W Docker Github pojawiają się dyskusje na temat określania krótkotrwałych "usług" dla takich rzeczy jak konserwacja, zadania cron itp., Ale nic nie zostało postanowione, a tym bardziej zakodowane. Więc najlepiej jest zbudować swój system, aby pojemniki były podniesione i pozostać w górze.
Nie od razu podałem swoją odpowiedź, więc najpierw pojawił się @larsks. Zatrzymam go tutaj, ponieważ ma kod, który może ci się przydać. – Alkaline
To działa. Nie jestem pewien, czy dobrym pomysłem jest zainstalowanie okna dokowanego wewnątrz okna dokowanego, co byłoby kolejnym pytaniem. Ponieważ @larsks pojawił się jako pierwszy, po prostu dałem ci znak. –
Działa, ale kod nie jest dla mnie zbyt jasny. Jestem zaintrygowany przez https://get.docker.com/ use. W każdym razie, należy zainstalować docker-ce w kontenerze dokowania (apt-get install docker-ce), a następnie użyć "docker restart containername", aby ponownie uruchomić inny kontener dokowania – Somum
- 1. Jak skopiować plik do zatrzymanego kontenera dokowanego
- 2. Mocowanie objętości kontenera do innego kontenera na innej ścieżce
- 3. certyfikaty ssl kontenera kontenera
- 4. Mocowanie kontenera S3 do kontenera
- 5. Czy ponowne uruchomienie kontenera Dockera "zapamiętaj" argumenty początkowego uruchomienia?
- 6. raphael przeciągnij i upuść obiekt z jednego kontenera do innego kontenera
- 7. Czy iterator kontenera może dać coś innego niż l-wartość?
- 8. Jak odzyskać objętość z usuniętego kontenera Docker?
- 9. Usuwanie z kontenera MEF
- 10. Przenoszenie obiektów z jednego unordered_map do innego kontenera
- 11. Obsługa zdarzenia zatrzymania/przeładowania kontenera
- 12. Źródło danych JNDI kontenera
- 13. Używanie osadzonego kontenera OSGi
- 14. Zarządzanie konfiguracją kontenera automatycznego
- 15. Typy elementów kontenera
- 16. Kiedy używać kontenera IOC?
- 17. Opis kontenera serwletów
- 18. Powtórzenie kontenera unique_ptr's
- 19. przepełnienie (przewijanie) - 100% wysokość kontenera
- 20. Skrypt uruchamiania kontenera dokera
- 21. Dynamicznie przełączaj widok kontenera
- 22. Rozmiar kontenera Azure Storage
- 23. Dostęp do kontrolera widoku kontenera
- 24. Ładowarka tokarka z loginem do kontenera
- 25. Docker - modyfikowanie IPTABLES dla hosta z kontenera
- 26. Animacja wysokości kontenera LinearLayout z ValueAnimatorem
- 27. Cechy klasy wyodrębnić VALUE_TYPE kontenera z back_insert_iterator
- 28. Ruchome elementy spośród asocjacyjną kontenera
- 29. Uzyskiwanie adresu Mac z kontenera Docker
- 30. Montaż cgroups wewnątrz kontenera dokowania
Podążyłem za wskazówkami. Następnie ręcznie skopiowałem 'docker' i' docker-compose' do kontenera. "Docker-compose" działa dobrze wewnątrz kontenera. Jednak muszę skopiować '/ usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1' z mojego hosta do kontenera, a następnie wewnątrz kontenera utworzyć dowiązanie symboliczne przez' ln -sf/usr/lib /x86_64-linux-gnu/libltdl.so.7.3.1/usr/lib/x86_64-linux-gnu/libltdl.so.7'. Wewnątrz kontenera: 'ldd/usr/bin/docker' wszystkie biblioteki są teraz rozwiązane i mogę uruchomić' docker' i 'docker-cocmpose' wewnątrz kontenera. – ifelsemonkey