Historia problemu związanego z migracją magazynu dokowanego (główny katalog dokujący)

Nie dalej niż kilka dni temu na jednym z serwerów podjęto decyzję o przeniesieniu docker Storage (katalog, w którym docker przechowuje wszystkie pliki kontenerów i obrazów) do osobnej sekcji, która
miał większą pojemność. Zadanie wydawało się banalne i nie zwiastowało kłopotów...

Zacznijmy:

1. Zatrzymaj i zabij wszystkie kontenery naszej aplikacji:

docker-compose down

jeśli pojemników jest dużo i są w różnych składach, możesz to zrobić:

docker rm -f $(docker ps -q)

2. Zatrzymaj demona dokującego:

systemctl stop docker

3. Przenieś katalog do żądanej lokalizacji:

cp -r /var/lib/docker /docker/data/storage

4. Mówimy demonowi dokującemu, aby zajrzał do nowego katalogu. Jest kilka opcji: albo użyj flagi -g, aby wskazać demonowi nową ścieżkę, albo użyj konfiguracji systemowej, której my użyliśmy. Albo dowiązanie symboliczne. Nie będę się nad tym rozwodzić, wszystko jest w internecie. pełen instrukcje dotyczące przenoszenia katalogu głównego okna dokowanego do nowej lokalizacji.

5. Uruchom demona dokującego i upewnij się, że wygląda we właściwym miejscu:

systemctl status docker

W jednej z linii wyjściowych powinniśmy zobaczyć:

├─19493 /usr/bin/dockerd --data-root=/docker/data/storage

Upewniliśmy się, że opcja została przekazana demonowi, teraz sprawdźmy, czy ją zastosował (dzięki inkvizitor68sl)!

docker info | awk '/Root Dir/ {print $NF}' 

6. Zacznijmy naszą aplikację:

docker-compose up -d

7. Sprawdź

I tu zaczyna się zabawa, DBMS, MQ, wszystko jest w porządku! Baza danych jest nienaruszona, wszystko działa… z wyjątkiem nginx. Mamy własną wersję Nginx z Kerberos i kurtyzanami. Przeglądanie dzienników kontenera wskazało, że nie może on zapisywać w /var/tmp - Odmowa uprawnień. Zagniatam palcami skronie i próbuję przeanalizować sytuację... Jak to możliwe? Obraz Dockera nie uległ zmianie. Właśnie przenieśliśmy katalog. Zawsze działało, a tu jest dla Ciebie... Dla eksperymentu wszedłem rękami do kontenera i zmieniłem prawa do tego katalogu, tam były korzeń, korzeń 755, dał korzeń, korzeń 777. I wszystko się zaczęło... W mojej głowie zaczęła pojawiać się myśl - jakieś bzdury... Pomyślałem, no, może czegoś nie wziąłem pod uwagę...

Uznałem, że zakochaliśmy się w prawach dostępu do plików podczas transferu. Zatrzymaliśmy aplikację, demona dokującego, usunęliśmy nowy katalog i skopiowaliśmy katalog /var/lib/docker za pomocą rsync -a.

Myślę, że teraz wszystko jest w porządku, podnieśmy aplikację Docker.

Aaa... problem pozostał... Moje oko drgnęło. Pobiegłem do konsoli mojej maszyny wirtualnej, gdzie uruchamiam różne testy, miałem ten obraz nginx i wspiąłem się do kontenera, a tutaj prawa do katalogu /var/tmp to root, root 777. Czyli tak samo, jak musiałem ustawić ręcznie. Ale obrazy są identyczne!

Wszędzie używany był system plików xfs.

Porównałem za pomocą polecenia

docker inspect my-nginx:12345

Wszystkie skróty są identyczne, wszystkie jeden do jednego. Zarówno na serwerze, jak i na mojej maszynie wirtualnej. Usunąłem lokalny obraz nginx i wyciągnąłem go ponownie z rejestru, który z wielu powodów znajduje się na tym samym komputerze. I problem jest ten sam... Teraz drugie oko mi drga.

Nie pamiętam już jakie myśli chodziły mi po głowie poza krzykiem „AAAAAAAA” i innymi rzeczami. Była czwarta rano i do zrozumienia zasady mieszania warstw obrazu wykorzystano kod źródłowy Dockera. Otworzyłem trzecią puszkę napoju energetycznego. I w końcu dotarło do mnie, że haszowanie uwzględnia tylko plik, jego zawartość, ale NIE PRAWA DOSTĘPU! Oznacza to, że w jakiś tajemniczy sposób utraciliśmy nasze prawa, selinux jest wyłączony, acl nie jest używane i nie ma lepkiego bitu.

Usunąłem obraz lokalny, usunąłem także obraz z rejestru dokerów i wypchnąłem go ponownie. I wszystko zadziałało. Okazuje się, że podczas transferu utracone zostały prawa zarówno do obrazu lokalnego, jak i do obrazu znajdującego się w rejestrze. Jak już mówiłem, z wielu powodów znajdował się on w tym samym samochodzie. W rezultacie w jednym katalogu /var/lib/docker.

I uprzedzając pytanie, czy próbowali zwrócić wzrok dokera na stary katalog - nie, nie próbowali, niestety okoliczności na to nie pozwoliły. Tak i naprawdę chciałem to rozgryźć.

Po napisaniu tego artykułu rozwiązanie problemu wydaje mi się oczywiste, jednak w momencie analizy tak nie wydawało się. Szczerze mówiąc, szukałem w Google i nie znalazłem podobnych sytuacji.

Wynik: rozwiązałem problem, nadal nie rozumiem przyczyny =(

Jeśli ktoś wie, domyśla się, miał wizję możliwych przyczyn tego problemu, będzie mi niezmiernie miło usłyszeć od Ciebie w komentarzach!

Źródło: www.habr.com

Dodaj komentarz