OS gazdă: Lansarea Red Hat Enterprise Linux Server 7.9 (Maipo)
OS invitat adică un container Docker care rulează: OpenSuse 15.2
Versiunea Docker (pe gazdă): Docker versiunea 19.03.5, construi 633a0ea
Pe gazdă, când clonez un depozit „utilities_scripts” am acces valid pentru utilizator (din cauza umask).
- Cred că problema aici nu este legată de permisiune, dar DE CE UTILIZATORUL definit în fișierul Docker nu este setat ca proprietar al folderelor/fișierelor (care sunt montate) în interiorul containerului docker, atunci când emit următoarele
docker run...
comanda. Setarea 755/775 etc nu este o opțiune, deoarece nu pot folosi în interiorul containerului ca utilizator docker țintă și setarea 777 este o practică proastă.
NOTĂ:
- Când încerc aceeași imagine docker de pe o altă mașină Linux, folderul/fișierele sunt montate ca utilizator "docker_non_root_user" care este definit în Dockerfile ca
USER docker_non_root_user
.
docker build...
rulează cu succes și creează o imagine, iar containerul funcționează pe o altă mașină (când montez git clone repos în interiorul containerului folosind -v <gazdă>:<container>
sintaxa opțiunii docker CLI.
Fragment de cod din Dockerfile este:
# Definiți orice referință la punctele de montare
VOLUM ["/home/docker_non_root_user/git"]
USER docker_non_root_user
WORKDIR /home/docker_non_root_user/git
Aceasta este ceea ce văd pe gazda unde am Dockerfile UTILIZATOR ...
problema de proprietate:
[gigauser@jenkins-projectABC bitbucket_workspace]$ whoami
gigauser
[gigauser@jenkins-projectABC bitbucket_workspace]$ id
uid=gigauser(gigauser) gid=21520(jenkins) grupuri=21520(jenkins),3000(ectx)
[gigauser@jenkins-projectABC bitbucket_workspace]$ umask
0077
[gigauser@jenkins-projectABC bitbucket_workspace]$ ls -l
total 12
drwx------ 5 gigauser jenkins 4096 3 februarie 16:36 utilities_scripts
[gigauser@jenkins-projectABC bitbucket_workspace]$
[gigauser@jenkins-projectABC bitbucket_workspace]$ imagine sudo docker ls
Parola Active Directory:
DIMENSIUNEA ID-ului IMAGINIEI Etichetei de depozitare creată
project-im-opensuse 15.2 0c9ee31464cd acum 43 ore 2,39 GB
[gigauser@jenkins-projectABC bitbucket_workspace]$
[gigauser@jenkins-projectABC bitbucket_workspace]$
[gigauser@jenkins-projectABC bitbucket_workspace]$ sudo docker run -v $PWD/utilities_scripts:/home/docker_non_root_user/git/utilities_scripts/ -it project-im-opensuse:15.2 bash -c "whoami; id; care bash; bash - -versiune; ls -l; echo; ls -l utilities_scripts; ls -l /home/docker_non_root_user/git/utilities_scripts; id gigauser; echo"
AVERTISMENT: redirecționarea IPv4 este dezactivată. Rețeaua nu va funcționa.
docker_non_root_user
uid=1000(docker_non_root_user) gid=487(docker_non_root_user) grupuri=487(docker_non_root_user),100(utilizatori)
/bin/bash
GNU bash, versiunea 4.4.23(1) - lansare (x86_64-suse-linux-gnu)
Drepturi de autor (C) 2016 Free Software Foundation, Inc.
Licență GPLv3+: GNU GPL versiunea 3 sau ulterioară <http://gnu.org/licenses/gpl.html>
Acesta este software gratuit; sunteți liber să îl schimbați și să îl redistribuiți.
NU ESTE GARANȚIE, în măsura permisă de lege.
total 8
drwx------ 5 gigauser 21520 4096 Feb 4 00:36 utilities_scripts
ls: nu se poate deschide directorul 'utilities_scripts': Permisiune refuzată
ls: nu se poate deschide directorul „/home/docker_non_root_user/git/utilities_scripts”: Permisiune refuzată
id: 'gigauser': nu există un astfel de utilizator
[gigauser@jenkins-projectABC bitbucket_workspace]$
Când rulez aceeași comandă pe altă mașină Linux, văd montat utilitati_scripturi
proprietarul folderului este docker_non_root_user
.
Întrebare: DE CE Văd ID-ul de utilizator al utilizatorului gazdei (unde rulez docker run comanda) este setat în containerul docker din folder utilitati_scripturi, când nu a fost creat un astfel de ID de utilizator în Dockerfile/există în interiorul containerului? (vezi ultima linie a 2-a din rezultatul de mai sus). În prezent, primește permisiunile de proprietar și la nivel de folder ale aceluiași gazdă în interiorul containerului docker.
gigauser
adică utilizatorul gazdei, nu este acolo în containerul docker, ci în fișier ls -l
ieșire arată gigauser
este proprietarul utilitati_scripturi
folder/fișiere din container. Această problemă nu apare pe altă mașină gazdă.
chiar am verificat /etc/subuid
dosar, mi se pare ok. Schimbarea valorii din interior la utilizatorul docker nu a ajutat. De asemenea, nu văd nimic legat de asta în /etc/docker/daemon.json
fişier.
$ cat /etc/subuid
gigauser:165536:65536
Alergând la fel docker run ....opțiuni
comanda de mai sus de la cealaltă mașină gazdă Linux, arată proprietatea folderului din containerul docker ca:
drwx------ 5 docker_non_root_user 1000 272 26 ian 21:52 utilities_scripts