Z tego, co mogę powiedzieć, obrazy dokerów są instalowane w /var/lib/dockermiarę ich pobierania. Czy istnieje sposób na zmianę tej lokalizacji, na przykład na zamontowany wolumin /mnt?
W starszych wersjach możesz zmienić katalog podstawowy pamięci Dockera (tam, gdzie idą kontener i obrazy), używając -gopcji podczas uruchamiania demona Docker. (sprawdź docker --help). Możesz ustawić to ustawienie automatycznie, gdy Docker rozpocznie pracę, dodając je do / etc / default / docker
Myślę, że najlepszym rozwiązaniem jest dodanie tej -gopcji do / etc / defaults / docker zamiast modyfikowania pliku Upstart, zobacz moją odpowiedź.
mbarthelemy
9
Tak, zmień ten wiersz naDOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
mbarthelemy
6
Nie działa w Fedorze. Zobacz moją odpowiedź, jeśli twoją dystrybucją jest Fedora
Vitor
3
Może być konieczne zaimplementowanie tego rozwiązania błędu w niektórych wersjach Debiana lub Ubuntu, jeśli docker zignoruje twój /etc/default/dockerplik.
Zgodnie z radą zawartą w komentarzach korzystam z dokumentacji systemowej Docker, aby poprawić tę odpowiedź. Poniższa procedura nie wymaga ponownego uruchomienia i jest znacznie czystsza.
Najpierw utwórz katalog i plik do niestandardowej konfiguracji:
Niedawno wypróbowałem powyższą procedurę z 17.09-ce na Fedorze 25 i wydaje się, że nie działa. Zamiast tej prostej modyfikacji /etc/docker/daemon.jsonwykonaj lewę:
{
"graph": "/mnt",
"storage-driver": "overlay"
}
Pomimo metody musisz ponownie załadować konfigurację i ponownie uruchomić Docker:
To jedyna metoda, która pomogła mi w Ubuntu 16.04!
Vadim,
1
Ten link docs.docker.com/engine/admin/systemd wyjaśnia, jak skonfigurować Docker za pomocą systemd, który działa dla nowszej dystrybucji Linuksa, takiej jak Ubuntu 16.04.
Joseph Hui
6
docker infoStwierdzenie jest prawdopodobnie nieaktualne. W systemie Ubuntu 16.04 sprawdzanie ponownej konfiguracji to sudo docker info | grep "Docker Root Dir". W przeciwnym razie dobrą odpowiedzią powinna być odpowiedź zaakceptowana;)
Guillaume Perrot
5
W nowej wersji systemu Linux (4.10) i Docker (docker-ce 17.06) należy zmienić wiersz w następujący sposób: / usr / bin / dockerd -H fd: // --data-root = "/ mnt"
Ponieważ nie znalazłem poprawnych instrukcji do zrobienia tego w Fedorze (EDYCJA: ludzie wskazali w komentarzach, że powinno to również działać na CentOS i Suse) (/ etc / default / docker nie jest tam używany), dodaję mój odpowiedz tutaj:
Musisz edytować / etc / sysconfig / docker i dodać opcję -g w zmiennej OPTIONS. Jeśli jest więcej niż jedna opcja, upewnij się, że umieścisz je w „”. W moim przypadku plik ten zawierał:
OPTIONS=--selinux-enabled
tak by się stało
OPTIONS="--selinux-enabled -g /mnt"
Po restarcie ( systemctl restart docker) Docker powinien użyć nowego katalogu
W CentOS 6.5 / 6.6 i prawdopodobnie 7 używasz tego samego pliku / etc / sysconfig / docker, ale dodajesz argumenty do nazwy zmiennej other_args.
dlaidlaw
Ta opcja nazywa się teraz DOCKER_OPTS (wersja dokująca 1.7.0).
nedim
6
Począwszy od wersji 1.8 Dockera, używanie plików konfiguracyjnych Docker w / etc / sysconfig jest przestarzałe. Zamiast tego należy użyć systemowych plików konfiguracyjnych drop-in w etc / systemd / system / docker.service.d. Po dodaniu lub zmodyfikowaniu pliku listy rozwijanej podczas działania usługi dokowania uruchom komendę systemctl daemon-reload, aby poinformować systemd o ponownym załadowaniu konfiguracji usługi. docs.oracle.com/cd/E52668_01/E54669/html/…
moja sprawa: centos7, najnowszy doker; musiałem wywołać „systemctl status docker”, aby znaleźć plik „docker.service” i dodałem opcję „-g” jak w odpowiedzi. Dzięki
W przypadku Debiana / Ubuntu lub Fedory prawdopodobnie możesz użyć innych odpowiedzi. Ale jeśli nie masz plików pod /etc/default/dockerlub /etc/sysconfig/docker, a system działa systemd, możesz postąpić zgodnie z tą odpowiedzią przez h3nrik . Korzystam z Arch, a to działa dla mnie.
Zasadniczo należy skonfigurować systemd, aby odczytał lokalizację nowego obrazu dokera jako zmienną środowiskową i przekazał tę zmienną środowiskową do skryptu wykonania demona Docker.
Dla kompletności, oto odpowiedź h3nrick:
Czy masz /lib/systemd/system/docker.serviceplik
Jeśli tak, edytować go tak, że usługa Docker używa zwykle /etc/default/dockerjako plik środowiska: EnvironmentFile=-/etc/default/docker.
W /etc/default/dockerpliku następnie dodaj DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images".
Na koniec po prostu zrób systemctl daemon-reload && systemctl restart docker.
Aby uzyskać więcej informacji, zajrzyj również do dokumentacji .
Nie twórz softlink. Powody, dla których zamieszczam mój komentarz, który publikuję wcześniej ... Możesz mieć problemy z poleceniami „docker rm”!
suther
2
@suther: May? Czy jest teraz sytuacja, w której wpadasz w kłopoty? Maj może być nieco nieprecyzyjny w dokumentacji technicznej, jeśli napotkam problem, chcę dowiedzieć się, kiedy dokładnie to się stanie, w jaki sposób ten problem jest spowodowany i jaki byłby wynik.
hakre
4
Zgodnie z zaleceniami @mbarthelemy można to zrobić za pomocą -gopcji podczas bezpośredniego uruchamiania demona dokera .
Jeśli jednak doker jest uruchamiany jako usługa systemowa, nie zaleca się modyfikowania /etc/default/dockerpliku. Jest to wskazówka znajduje się tutaj .
Prawidłowe podejście polega na utworzeniu /etc/docker/daemon.jsonpliku w systemach Linux (lub Mac) lub %programdata%\docker\config\daemon.jsonWindows. Jeśli ten plik nie jest używany do niczego innego, wystarczą następujące pola:
{
"graph": "/docker/daemon_files"
}
Zakłada się, że nowa lokalizacja, w której chcesz, aby doker zachował swoje dane, to /docker/daemon_files
W Fedorze 26 i prawdopodobnie w wielu innych wersjach możesz napotkać błąd po przeniesieniu lokalizacji folderu podstawowego, jak opisano powyżej. Jest to szczególnie prawdziwe, jeśli przenosisz go gdzieś w / home. Wynika to z tego, że SeLinux uruchamia się i uniemożliwia kontenerowi dokera uruchomienie wielu swoich programów z tej lokalizacji.
Krótkim rozwiązaniem jest usunięcie opcji --enable-selinux po dodaniu parametru -g.
Na serwerze AWS Ubuntu 16.04 umieściłem obrazy Dockera na osobnym systemie EBS, zamontowanym na / home / ubuntu / kaggle /, pod katalogiem dokera
Ten fragment mojego skryptu inicjującego działał poprawnie
# where are the images initially stored?
sudo docker info | grep "Root Dir"
# ... not where I want them
# modify the configuration files to change to image location
# NOTE this generates an error
# WARNING: Usage of loopback devices is strongly discouraged for production use.
# Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
# see /programming/31620825/
# warning-of-usage-of-loopback-devices-is-strongly-discouraged-for-production-use
sudo sed -i ' s@#DOCKER_OPTS=.*@DOCKER_OPTS="-g /home/ubuntu/kaggle/docker"@ ' /etc/default/docker
sudo chmod -R ugo+rw /lib/systemd/system/docker.service
sudo cp /lib/systemd/system/docker.service /etc/systemd/system/
sudo chmod -R ugo+rw /etc/systemd/system/
sudo sed -i ' s@ExecStart.*@ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://@ ' /etc/systemd/system/docker.service
sudo sed -i '/ExecStart/a EnvironmentFile=-/etc/default/docker' /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info | grep "Root Dir"
# now they're where I want them
Użytkownicy komputerów Mac w wersji 17.06.0-ce-mac19 mogą po prostu przenieść lokalizację obrazu dysku z interfejsu użytkownika w opcji preferencji. Po prostu zmień lokalizację obrazu dysku, a on zadziała (klikając opcję Przenieś obraz dysku ) i uruchomi się ponownie doker. Dzięki takiemu podejściu mogłem wykorzystać mój zewnętrzny dysk twardy do przechowywania obrazów dokerów.
Odpowiedzi:
W najnowszych wersjach Dockera ustawisz wartość
data-root
parametru na ścieżkę niestandardową w/etc/docker/daemon.json
(zgodnie z https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file ).W starszych wersjach możesz zmienić katalog podstawowy pamięci Dockera (tam, gdzie idą kontener i obrazy), używając
-g
opcji podczas uruchamiania demona Docker. (sprawdźdocker --help
). Możesz ustawić to ustawienie automatycznie, gdy Docker rozpocznie pracę, dodając je do / etc / default / dockerźródło
-g
opcji do / etc / defaults / docker zamiast modyfikowania pliku Upstart, zobacz moją odpowiedź.DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
/etc/default/docker
plik.graph
Atrybut w daemon.json jest przestarzała od v17.05.0, użyjdata-root
zamiast, cf. stackoverflow.com/a/50217666/743507Zgodnie z radą zawartą w komentarzach korzystam z dokumentacji systemowej Docker, aby poprawić tę odpowiedź. Poniższa procedura nie wymaga ponownego uruchomienia i jest znacznie czystsza.
Najpierw utwórz katalog i plik do niestandardowej konfiguracji:
W przypadku wersji dokowanej przed wklejeniem 17.06-ce :
W przypadku dokera po wklejeniu 17.06-ce :
Alternatywna metoda poprzez
daemon.json
Niedawno wypróbowałem powyższą procedurę z 17.09-ce na Fedorze 25 i wydaje się, że nie działa. Zamiast tej prostej modyfikacji
/etc/docker/daemon.json
wykonaj lewę:Pomimo metody musisz ponownie załadować konfigurację i ponownie uruchomić Docker:
Aby potwierdzić, że Docker został ponownie skonfigurowany:
W najnowszej wersji (17.03) wymagana jest inna komenda:
Dane wyjściowe powinny wyglądać następująco:
Lub:
Następnie możesz bezpiecznie usunąć starą pamięć Docker:
źródło
docker info
Stwierdzenie jest prawdopodobnie nieaktualne. W systemie Ubuntu 16.04 sprawdzanie ponownej konfiguracji tosudo docker info | grep "Docker Root Dir"
. W przeciwnym razie dobrą odpowiedzią powinna być odpowiedź zaakceptowana;)Docker Root Dir: /"/mnt"
kiedy uruchamiaszdocker info|grep "Docker Root Dir"
, musisz zamienić--data-root="/mnt"
na--data-root=/mnt
wewnątrz plikudocker-storage.conf
W przypadku nowych wersji dokera musimy użyć tego,
data-root
cograph
jest przestarzałe w wersji 17.05.0: oficjalne przestarzałe dokumentyEdytuj
/etc/docker/daemon.json
(jeśli nie istnieje, utwórz go) i dołącz:Następnie uruchom ponownie Docker za pomocą:
źródło
Ponieważ nie znalazłem poprawnych instrukcji do zrobienia tego w Fedorze (EDYCJA: ludzie wskazali w komentarzach, że powinno to również działać na CentOS i Suse) (/ etc / default / docker nie jest tam używany), dodaję mój odpowiedz tutaj:
Musisz edytować / etc / sysconfig / docker i dodać opcję -g w zmiennej OPTIONS. Jeśli jest więcej niż jedna opcja, upewnij się, że umieścisz je w „”. W moim przypadku plik ten zawierał:
tak by się stało
Po restarcie (
systemctl restart docker
) Docker powinien użyć nowego kataloguźródło
Nie używaj dowiązania symbolicznego, aby przenieść folder dokera do / mnt (na przykład). Może to powodować problemy z poleceniem docker rm .
Lepiej użyj opcji -g dla dokera. W Ubuntu możesz ustawić go na stałe w /etc/default/docker.io. Ulepsz lub zamień linię DOCKER_OPTS.
Oto przykład: `DOCKER_OPTS =" - g / mnt / wherewhere / else / docker / "
źródło
docker rm
podczas korzystania z dowiązania symbolicznego?Ubuntu 16.04
stackoverflow.com/a/30219552/977622, aby to zadziałałoZnacznie łatwiejszy sposób to zrobić:
Zatrzymaj usługę dokowania
Przenieś istniejący katalog dokerów do nowej lokalizacji
Utwórz łącze symboliczne
Uruchom usługę dokowania
źródło
sudo ln -s /path/to/new/docker/ /var/lib/docker
To rozwiązanie działa w systemach Red Hat 7.2 i Docker 1.12.0
Edytuj plik /lib/systemd/system/docker.service w edytorze tekstu.
dodaj -g / path / to / docker / na końcu dyrektywy ExecStart . Pełna linia powinna wyglądać następująco.
Wykonaj poniższe polecenie
Wykonaj polecenie, aby sprawdzić katalog dokera
Jeśli masz plik / etc / sysconfig / docker w Red Hat lub docker 1.7.1, sprawdź tę odpowiedź.
źródło
Skopiuj i wklej wersję odpowiedzi zwycięzcy :)
Utwórz ten plik zawierający tylko tę treść:
$ sudo vi /etc/docker/daemon.json
Testowane
Ubuntu 16.04.2 LTS
w oknie dokowanym1.12.6
źródło
graph
Atrybut w daemon.json jest przestarzała od v17.05.0, użyjdata-root
zamiast, cf. stackoverflow.com/a/50217666/743507W CentOS 6.5
dodaj następujący wiersz
następnie zapisz plik i uruchom ponownie okno dokowane
i utworzy plik repozytorium w
/data/docker
źródło
W przypadku Debiana / Ubuntu lub Fedory prawdopodobnie możesz użyć innych odpowiedzi. Ale jeśli nie masz plików pod
/etc/default/docker
lub/etc/sysconfig/docker
, a system działa systemd, możesz postąpić zgodnie z tą odpowiedzią przez h3nrik . Korzystam z Arch, a to działa dla mnie.Zasadniczo należy skonfigurować systemd, aby odczytał lokalizację nowego obrazu dokera jako zmienną środowiskową i przekazał tę zmienną środowiskową do skryptu wykonania demona Docker.
Dla kompletności, oto odpowiedź h3nrick:
Czy masz
/lib/systemd/system/docker.service
plikJeśli tak, edytować go tak, że usługa Docker używa zwykle
/etc/default/docker
jako plik środowiska:EnvironmentFile=-/etc/default/docker
.W
/etc/default/docker
pliku następnie dodajDOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"
.Na koniec po prostu zrób
systemctl daemon-reload && systemctl restart docker
.Aby uzyskać więcej informacji, zajrzyj również do dokumentacji .
źródło
Dużo prostszym rozwiązaniem jest utworzenie miękkiego linku do dowolnego elementu, na przykład
Działa dla mnie na moim serwerze CentOS 6.5.
źródło
Zgodnie z zaleceniami @mbarthelemy można to zrobić za pomocą
-g
opcji podczas bezpośredniego uruchamiania demona dokera .Jeśli jednak doker jest uruchamiany jako usługa systemowa, nie zaleca się modyfikowania
/etc/default/docker
pliku. Jest to wskazówka znajduje się tutaj .Prawidłowe podejście polega na utworzeniu
/etc/docker/daemon.json
pliku w systemach Linux (lub Mac) lub%programdata%\docker\config\daemon.json
Windows. Jeśli ten plik nie jest używany do niczego innego, wystarczą następujące pola:Zakłada się, że nowa lokalizacja, w której chcesz, aby doker zachował swoje dane, to
/docker/daemon_files
źródło
W openSUSE Leap 42.1
Zauważ, że DOCKER_OPTS był początkowo pusty i wszystko, co zrobiłem, to dodanie argumentu, aby doker mógł użyć mojego nowego katalogu
źródło
W Fedorze 26 i prawdopodobnie w wielu innych wersjach możesz napotkać błąd po przeniesieniu lokalizacji folderu podstawowego, jak opisano powyżej. Jest to szczególnie prawdziwe, jeśli przenosisz go gdzieś w / home. Wynika to z tego, że SeLinux uruchamia się i uniemożliwia kontenerowi dokera uruchomienie wielu swoich programów z tej lokalizacji.
Krótkim rozwiązaniem jest usunięcie opcji --enable-selinux po dodaniu parametru -g.
źródło
Na serwerze AWS Ubuntu 16.04 umieściłem obrazy Dockera na osobnym systemie EBS, zamontowanym na / home / ubuntu / kaggle /, pod katalogiem dokera
Ten fragment mojego skryptu inicjującego działał poprawnie
źródło
Użytkownicy komputerów Mac w wersji 17.06.0-ce-mac19 mogą po prostu przenieść lokalizację obrazu dysku z interfejsu użytkownika w opcji preferencji. Po prostu zmień lokalizację obrazu dysku, a on zadziała (klikając opcję Przenieś obraz dysku ) i uruchomi się ponownie doker. Dzięki takiemu podejściu mogłem wykorzystać mój zewnętrzny dysk twardy do przechowywania obrazów dokerów.
źródło