2015-12-26 11 views
6

Mam OpenVZ VPS, system operacyjny to CentOS 6, próbuję zainstalować Docker, ale błąd uruchomienia Docker.Instalowanie Docker na OpenVZ VPS

Starting cgconfig service: Error: cannot mount cpuset to /cgroup/cpuset: Invalid argument 
/sbin/cgconfigparser; error loading /etc/cgconfig.conf: Cgroup mounting failed 
Failed to parse /etc/cgconfig.conf or /etc/cgconfig.d  [FAILED] 
Starting docker:           [ OK ] 
+0

Wygląda na to, że moduł 'cgroups' nie został załadowany. Może nie zainstalowany ?! Jednak 'docker' może nadal działać bez wsparcia cgroups. spróbuj zainstalować i włączyć 'cgroups ':' sudo yum install libcgroup' oraz 'sudo service cgconfig start'. teraz powinieneś mieć dostęp do ścieżek 'cgroups':' sudo ls -l/cgroup'. Zrestartuj usługę dokowania i sprawdź, czy działa. – Boynux

Odpowiedz

17

Zaktualizowano gru 2016. I nie próbowali powielić @Alien Życie formularza odpowiedzi, ale dodać więcej szczegółów.

Krótka odpowiedź:

W większości przypadków OpenVZ hostingowych użyje OpenVZ 6 z przestarzałej jądro, które jest niezgodne z Docker.

Docker jest obsługiwana tylko z OpenVZ 7 (oparty na jądrze 3.x, zobacz https://openvz.org/Docker_inside_CT_vz7) lub OpenVZ 6 z wersji jądra 042stab105.4 lub nowszej (patrz https://openvz.org/Docker_inside_CT).

Długa odpowiedź:

Docker wymaga dwóch cech jądra Linuksa w celu działania: grupy kontrolne i nazw. Więc potrzebujesz jądra z tymi funkcjami.

Z OpenVZ nie kontrolujesz swojego jądra, działa tylko firma hostingowa. Większość firm hostingowych nie będzie współpracować i aktualizować jądra, więc jeśli kernel okaże się niekompatybilny, generalnie nie masz szczęścia.

OpenVZ 7 jest oparty na jądrach 3.10, które obsługują Docker po wyjęciu z pudełka, jednak nie widziałem jeszcze hostingu OpenVZ 7 - KVM wydaje się być najpopularniejszą wirtualizacją z nowymi niskobudżetowymi dostawcami wchodzącymi na rynek.

OpenVZ 6 jest bardziej popularny u starszych dostawców i jest oparty na jądrze 2.6 ogólnie niekompatybilnym z Dockerem. Jądra OpenVZ nie są jednak normalnymi jądrami 2.6, ale mają kilka funkcji przeniesionych z jądra 3.x. W rzeczywistości jądro 042stab105.4 i nowsze obsługują funkcje wymagane przez Docker zgodnie z oficjalnym wiki OpenVZ (patrz odpowiedź @Alien Life Form).

Tekst poniżej odnosi się tylko do wersji OpenVZ 6.

Jeśli uname -a pokazuje jądra 042stab105.4 lub nowszy - można użyć Döcker z niektórych poprawek do montażu wymagane specjalne systemy plików.

Jeśli jest starszy i firma chce współpracować, nie może zainstalować jądra głównego, ponieważ jest niezgodna z OpenVZ. Muszą zainstalować specjalne jądro z łatkami OpenVZ z https://openvz.org/Download/kernel. Najlepiej najnowszą stabilną wersję (która jest 042stab120.11 w momencie pisania), ale co najmniej 042stab105.4. Dla porównania, wszystkie hosty OpenVZ, które widziałem, mają coś takiego, jak 2.6.32-042stab075.2, co jest nie tylko niezgodne z Dockerem, ale także podatne na atak. Możesz więc spróbować użyć argumentu dotyczącego luki w zabezpieczeniach, aby zmusić wsparcie do aktualizacji :)

Innym oczywistym, ale nie zawsze stosowanym rozwiązaniem jest przejście z OpenVZ na hosting za pomocą innej technologii wirtualizacji, takiej jak Xen lub KVM. Jednak może się zdarzyć, że główne jądro CentOS 6 nie ma niezbędnych funkcji, więc CentOS 6 może być kompatybilny z Dockerem tylko wtedy, gdy jest uruchamiany z nieumieszczonymi łatkami jądra. Więc możesz rozważyć przeniesienie do CentOS 7 też.

+0

Najwyraźniej docker 1.10 był ostatnią wersją, która działała z tym kernelem 2.6.32. Kolejne wersje dokowania zawierają błąd w rodzaju: Twoja wersja jądra Linux 2.6.32-042stab123.2 nie jest obsługiwana podczas uruchamiania okna dokowanego. Uaktualnij jądro do wersji 3.10.0 lub nowszej. –

+0

Dziękuję za szczegółową odpowiedź! Bardzo mi to pomogło. – Dmitriy

1

Stary wątek - jednak rozwiązanie można znaleźć traktując CentOS6 jak gdyby był to debian wheezy w ten link: https://openvz.org/Docker_inside_CT

Zasadniczo w /etc/init.d/docker zrobić:

prestart() { 
# ALF service cgconfig status > /dev/null 
# ALF 
# ALF if [[ $? != 0 ]]; then 
# ALF  service cgconfig start 
# ALF fi 
mount -t tmpfs tmpfs /sys/fs/cgroup 
mkdir /sys/fs/cgroup/freezer,devices 
mount -t cgroup cgroup /sys/fs/cgroup/freezer,devices -o freezer,devices 
mkdir /sys/fs/cgroup/cpu,cpuacct,cpuset 
mount -t cgroup cgroup /sys/fs/cgroup/cpu,cpuacct,cpuset/ -o cpu,cpuacct,cpuset 

}