Domyślnie podczas uruchamiania
docker run -it [myimage]
LUB
docker attach [mycontainer]
łączysz się z terminalem jako użytkownik root, ale chciałbym połączyć się jako inny użytkownik. czy to możliwe?
docker
containers
root
Andy59469
źródło
źródło
docker run --user user_name
su user_name
Odpowiedzi:
Dla
docker run
:Po prostu dodaj opcję
--user <user>
zmiany na innego użytkownika po uruchomieniu kontenera Dockera.Dla
docker attach
lubdocker exec
:Ponieważ polecenie służy do dołączania / wykonywania do istniejącego procesu, dlatego bezpośrednio używa tam bieżącego użytkownika.
Jeśli naprawdę chcesz dołączyć do użytkownika, którego chcesz mieć, to
run --user <user>
lub wspomnij o nim w swoimDockerfile
użyciuUSER
źródło
Możesz uruchomić powłokę w działającym kontenerze docker za pomocą polecenia takiego jak:
docker exec -it --user root <container id> /bin/bash
źródło
--user
Opcję można pominąć, gdy polecenia muszą być uruchamiane jako root.USER
instrukcji, patrz docs.docker.com/engine/reference/builder/#userMożesz określić
USER
w pliku Dockerfile. Wszystkie kolejne akcje będą wykonywane przy użyciu tego konta. Możesz określićUSER
jedną linię przedCMD
lub,ENTRYPOINT
jeśli chcesz użyć tego użytkownika tylko podczas uruchamiania kontenera (a nie podczas tworzenia obrazu). Po uruchomieniu kontenera z obrazu wynikowego dołączysz jako określony użytkownik.źródło
Jedyny sposób, w jaki mogę to zrobić, to:
Więc muszę zarówno określić zmienną środowiskową $ USER, jak i wskazać plik / etc / passwd. W ten sposób mogę skompilować w folderze / siem i zachować prawo własności do plików, które nie są tam jako root.
źródło
Moje rozwiązanie:
Umożliwia to użytkownikowi uruchamianie dowolnych poleceń za pomocą narzędzi udostępnianych przez
my-docker-image
. Zwróć uwagę, w jaki sposób podłączany jest bieżący katalog roboczy użytkownika/cmd
wewnątrz kontenera.Używam tego przepływu pracy, aby umożliwić mojemu zespołowi programistów kompilację krzyżową kodu C / C ++ dla celu arm64, którego bsp obsługuję (
my-docker-image
zawiera kompilator krzyżowy, sysroot, make, cmake itp.). Dzięki temu użytkownik może po prostu zrobić coś takiego:Gdzie
cross_compile.sh
jest skrypt pokazany powyżej. Plikaddgroup/useradd
Maszyny pozwala obsługi własność żadnych plików / katalogów tworzonych przez kompilacji.Chociaż to działa dla nas. Wydaje się trochę hacky. Jestem otwarty na alternatywne wdrożenia ...
źródło
Wykonaj polecenie jako użytkownik danych www:
docker exec -t --user www-data container bash -c "ls -la"
źródło
Dla
docker-compose
. Wdocker-compose.yml
:W
.env
:źródło
Jako zaktualizowana odpowiedź z 2020 r. --User, opcja -u to Nazwa użytkownika lub UID (format: <nazwa | uid> [: <grupa | gid>]).
Wtedy działa na mnie w ten sposób,
Źródła: https://docs.docker.com/engine/reference/commandline/exec/
źródło
To rozwiązało mój przypadek użycia, który jest następujący: „Skompiluj zawartość pakietu webpack w kontenerze nodejs w systemie Windows z systemem Docker Desktop z WSL2 i miej wbudowane zasoby pod aktualnie zalogowanym użytkownikiem”.
Na podstawie odpowiedzi eigenfielda . Dziękuję Ci!
Również ten materiał pomógł mi zrozumieć, co się dzieje.
źródło