Zwykle kontenery dokerów są uruchamiane przy użyciu katalogu głównego użytkownika . Chciałbym użyć innego użytkownika, co nie stanowi problemu przy użyciu dyrektywy USER dokera. Ale ten użytkownik powinien mieć możliwość korzystania z sudo wewnątrz kontenera. Brakuje tego polecenia.
Oto prosty plik Docker do tego celu:
FROM ubuntu:12.04
RUN useradd docker && echo "docker:docker" | chpasswd
RUN mkdir -p /home/docker && chown -R docker:docker /home/docker
USER docker
CMD /bin/bash
Po uruchomieniu tego kontenera loguję się przy użyciu „dokera” użytkownika. Gdy próbuję użyć sudo, nie można znaleźć polecenia. Próbowałem więc zainstalować pakiet sudo w moim pliku Docker
RUN apt-get install sudo
Powoduje to, że nie można znaleźć pakietu sudo
docker
sudo
linux-containers
drubb
źródło
źródło
Odpowiedzi:
Właśnie to mam. Jak zauważyła regan, musiałem dodać użytkownika do grupy sudoers. Ale głównym powodem było to, że zapomniałem zaktualizować pamięć podręczną repozytoriów, więc apt-get nie mógł znaleźć pakietu sudo. Już działa. Oto gotowy kod:
źródło
adduser
komenda wypluwa wykorzystanie pomocy dlauseradd
/etc/sudoers.d/
i ustawić uprawnienia do440
tego pliku. Wtedy użytkownik miałby dostęp do sudo w CentOS, 6 i nowszych. 5 będziesz musiał dodać#includedir /etc/sudoers.d
dyrektywę do/etc/sudoers
Gdy ani sudo, ani apt-get nie są dostępne w kontenerze, możesz również wskoczyć do uruchomionego kontenera jako użytkownik root, używając polecenia
źródło
Inne odpowiedzi nie działały dla mnie. Ciągle szukałem i znalazłem post na blogu, który opisywał, jak zespół uruchamiał użytkownika innego niż root wewnątrz kontenera dokowanego.
Oto wersja TL; DR:
Używałem
FROM node:9.3
tego, ale podejrzewam, że inne podobne podstawy kontenerów również by działały.źródło
ubuntu:bionic-20180724.1
. Użyłem tego podejścia, ale po powyższym nie pozwala mi to na zainstalowanie innego pakietu. I dołączana jedną linię z powyższymDockerfile
, aby zainstalować pakiet z:RUN apt-get install -y tree
. Dał mi jednak następujący komunikat o błędzie:Step xxxx/xxxx : RUN apt-get install -y tree ---> Running in j5e6gsvwfafa Reading package lists... E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied) E: Unable to lock directory /var/lib/apt/lists/
RUN sudo apt-get install -y tree
. Po ustawieniu naUSER
coś innego niżroot
, będziesz musiał używaćsudo
wszystkich poleceń wymagającychroot
uprawnień.sudo
jest dozwolony w Dockerfile.Dla każdego, kto ma ten problem z już działającym kontenerem i niekoniecznie chce go odbudować, następujące polecenie łączy się z działającym kontenerem z uprawnieniami roota:
Możesz także połączyć się przy użyciu jego identyfikatora, a nie nazwy, znajdując go za pomocą:
Aby zapisać zmiany, aby pozostały tam przy następnym uruchomieniu kontenera (lub klastra tworzenia dokerów):
Aby uruchomić kontener, który nie jest uruchomiony i połączyć się jako root:
Aby skopiować z działającego kontenera:
Aby wyeksportować kopię obrazu:
Które możesz przywrócić do innej instalacji Dockera za pomocą:
Jest znacznie szybszy, ale nie zajmuje więcej miejsca na kompresję, używając:
I:
źródło
jeśli chcesz połączyć się z kontenerem i zainstalować coś
za pomocą apt-get
najpierw, jak wyżej, odpowiedz od naszego brata „Tomáš Záluský”
następnie spróbuj
działało ze mną, mam nadzieję, że będzie przydatne dla wszystkich
źródło
Jeśli SUDO lub apt-get nie jest dostępny w kontenerze, możesz użyć opcji poniżej w uruchomionym kontenerze.
„ f83b5c5bf413” to mój identyfikator kontenera, a tutaj działa przykład z mojego terminala:
źródło
Oto jak skonfigurować użytkownika innego niż root przy użyciu podstawowego obrazu
ubuntu:18.04
:Co dzieje się z powyższym kodem:
foo
zostaną utworzone.foo
zostanie dodany zarówno do, jakfoo
i dosudo
grupy.uid
igid
jest ustawiona na wartość999
./home/foo
./bin/bash
.sed
Komenda robi inline aktualizacje do/etc/sudoers
pliku, aby umożliwićfoo
iroot
użytkowników bez podawania haseł dostępu dosudo
grupy.sed
Komenda wyłącza#includedir
dyrektywy, który pozwoliłby żadnych plików w podkatalogach, aby zastąpić te aktualizacje wbudowanych.źródło
Jeśli masz kontener działający jako root, który uruchamia skrypt (którego nie możesz zmienić), który potrzebuje dostępu do
sudo
polecenia, możesz po prostu utworzyć nowysudo
skrypt w swoim,$PATH
który wywołuje przekazane polecenie.np. w twoim pliku Docker:
źródło
-e
zecho
. W przeciwnym razie będzie on obecny w samym pliku, czyniąc go niedziałającym.sudo -E ls
. Spróbuje wykonać-E ls
.To może nie działać dla wszystkich obrazów, ale niektóre obrazy zawierają już użytkownika root, na przykład w obrazie jupyterhub / singleuser. Z tym obrazem jest to po prostu:
źródło
Użyj aliasu.
Prosty i wydajny. Nie zapomnij dołączyć go do .bashrc, aby nadal działał po ponownym otwarciu powłoki.
Ponieważ użytkownik jest domyślnym rootem w Dockerze, „zignoruj” polecenie sudo jest najprostszym sposobem.
źródło
W przeciwieństwie do zaakceptowanej odpowiedzi ,
usermod
zamiast niej używam .Załóżmy, że jesteś zalogowany jako root w oknie dokowanym, a „fruit” to nowa nazwa użytkownika innego niż root, którą chcę dodać, po prostu uruchom następujące polecenia:
Pamiętaj, aby zapisać obraz po aktualizacji. Użyj,
docker ps
aby uzyskać bieżące uruchomione okno dokowane <CONTAINER ID> i <IMAGE>, a następnie uruchom,docker commit -m "added sudo user" <CONTAINER ID> <IMAGE>
aby zapisać obraz dokera.Następnie przetestuj za pomocą:
Lub przetestuj przez bezpośrednie logowanie (najpierw zapisz obraz) jako użytkownik inny niż root podczas uruchamiania dokera:
Możesz użyć
sudo -k
do zresetowania sygnatury czasowej hasła:źródło