Jinsi ya kusakinisha Docker kwenye Rocky au AlmaLinux
Sakinisha Docker Engine kwa dnf kwenye Rocky Linux na AlmaLinux. Jifunze kurekebisha migogoro ya Podman, lebo za SELinux kwenye bind mounts, na usalama wa Firewalld kwa usahihi.
Kusakinisha Docker kwenye Rocky Linux na AlmaLinux
Ili kusakinisha Docker kwenye Rocky Linux au AlmaLinux, unaongeza dnf repository ya Docker, unasakinisha engine pamoja na compose plugin, kisha unawasha huduma hiyo. Hatua hiyo inahusisha amri nne, na inafanana kwenye mifumo yote miwili kwa sababu yote ni matoleo yaliyojengwa upya kutoka Red Hat Enterprise Linux (RHEL) na yanashiriki mpangilio sawa wa vifurushi. CentOS Stream inafanya kazi kwa njia ile ile. Kila kitu hapa chini kinahusu mifumo yote miwili, kwa hivyo ikiwa bado unachagua kati yao, sababu za kuamua ni ahadi ya utangamano ambayo kila mradi inatoa na kama CPU yako ya zamani bado inatumika.
Usakinishaji ni mfupi, kwa hivyo sehemu kubwa ya mwongozo huu inashughulikia kile Enterprise Linux (EL) inachofanya tofauti na Ubuntu. Podman inaweza kuwa tayari inamiliki amri ya docker kwenye image yako. SELinux inazuia faili zilizowekwa kwa bind-mount hadi ziwe na lebo sahihi. Firewalld haichuji port zilizochapishwa na Docker, kwa hivyo port ya container inaweza kuwa wazi kwa Internet wakati firewall-cmd ikiripoti kuwa hakuna kitu kilicho wazi.
Usitumie hati ya urahisi (convenience script) ya Docker kutoka get.docker.com. Nyaraka za Docker zenyewe zinasema haipendekezwi kwa matumizi ya uzalishaji (production). Inabadilisha usanidi wa repository yako bila kuuliza, na haiwezi kuendeshwa tena kwa usalama ili kufanya upgrade. Kuongeza repository kwa mkono kunamaanisha kuwa dnf upgrade inachukulia Docker kama kifurushi kingine chochote kwenye seva. Hii pia inaiweka engine hiyo katika wigo wa dnf-automatic, ikiwa unaitumia kutekeleza masasisho ya usalama kwa wakati uliopangwa, kwa hivyo amua mapema ikiwa unataka Docker ipate viraka bila kusimamiwa au isubiri dirisha la matengenezo. Vyovyote vile, upgrade inachukua nafasi ya binary iliyopakiwa wakati dockerd ya zamani inaendelea kufanya kazi, na needs-restarting ni amri inayokuambia ni huduma zipi bado zinaendesha code uliyobadilisha hivi punde.
Je, podman inajibu amri ya docker?
Rocky Linux na AlmaLinux husafirisha podman katika hazina zao za kawaida (default repositories), na picha nyingi za VPS huiweka kwa ajili yako. Picha nyingine huenda mbali zaidi na kuweka podman-docker, ambayo huweka hati ya shell (shell script) kwenye /usr/bin/docker inayoiita podman. Kila amri ya docker unayoandika basi huendesha podman badala yake, kwa hivyo mwongozo ulioandikwa kwa ajili ya Docker huanza kutoa matokeo ambayo hukutarajia.
Dalili ya kwanza ni bango (banner). Hati ya /usr/bin/docker hukagua faili ya /etc/containers/nodocker, na wakati faili hiyo haipo, huchapisha mstari mmoja kabla ya kuendesha chochote:
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.Mtu anaweza kuwa ameunda faili hiyo ili kunyamazisha bango hilo, kwa hivyo usitegemee hilo pekee. Uliza hifadhidata ya vifurushi (package database) ni kifurushi kipi kinachomiliki binary hiyo:
command -v docker
rpm -qf "$(command -v docker)"Jibu linaloanza na podman-docker linamaanisha podman ndiyo inayojibu. Jibu linaloanza na docker-ce-cli linamaanisha Docker halisi. Ikiwa rpm -qf itaripoti kuwa hakuna kifurushi kinachomiliki faili hiyo, mtu aliweka kwa mkono na unapaswa kusoma hati hiyo kabla ya kuiamini.
Podman huendesha picha zilezile za OCI na ni chaguo linalofaa. Ikiwa unaitaka, simama hapa. Zote mbili ni injini za kontena za Linux, kwa hivyo ikiwa uamuzi wa jukwaa bado uko wazi, ni vyema kujua kuwa FreeBSD jails hutenga userland nzima badala ya kuendesha picha zilizopangwa (layered images) zilizovutwa kutoka kwenye registry. Ikiwa unataka Docker Engine, ondoa vifurushi vinavyokinzana kwanza. Hii ndiyo orodha ambayo Docker inaiandika kwa ajili ya RHEL:
sudo dnf remove docker docker-client docker-client-latest docker-common \
docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runcSoma kile ambacho dnf inapanga kukiondoa kabla ya kuthibitisha. Kwenye picha mpya ya VPS, orodha hiyo ni fupi. Kwenye seva ambayo mtu amekwisha itumia, kuondoa podman kunaweza kuondoa cockpit-podman au zana nyingine inayotegemea kifurushi hicho.
Kuweka podman pamoja na Docker kunawezekana kimsingi: ondoa podman-docker pekee, ili jina la docker liwe huru, na runc, ambayo kifurushi cha containerd.io huchukua nafasi yake. Nyaraka za Docker huchukulia podman kama kifurushi kinachokinzana, kwa hivyo mpangilio huu si ule ambao Docker inauunga mkono. Ikiwa usakinishaji bado unaripoti mgongano, tumia orodha kamili ya uondoaji hapo juu.
Ongeza hazina ya Docker kwa kutumia dnf config-manager
Docker huchapisha RPM kwa ajili ya Enterprise Linux kwenye download.docker.com. Faili ya hazina hiyo inaelekeza kwenye mti wa CentOS, ambao ndio Rocky Linux na AlmaLinux hutumia kutatua utegemezi. Kuelekeza seva ya Rocky kwenye hazina ya CentOS huonekana kama kosa hadi utakapoelewa jinsi usambazaji wote wawili ulivyotokana na ukoo wa CentOS baada ya Red Hat kuigeuza CentOS kuwa Stream mnamo 2020. Ilipokaguliwa mnamo Agosti 2026, Docker inaelekeza hazina hii kwa ajili ya CentOS Stream 9 na CentOS Stream 10.
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoToleo la 5 la dnf liliondoa hoja ya --add-repo, kwa hivyo amri hiyo ya pili inashindwa kufanya kazi kwenye matoleo mapya zaidi. Angalia toleo ulilonalo, kisha chagua fomu inayolingana:
dnf --versionIkiwa itachapisha toleo la 5.x, tumia fomu ya subcommand badala yake:
sudo dnf config-manager addrepo --from-repofile=https://download.docker.com/linux/centos/docker-ce.repoZote mbili huandika faili ileile kwenye /etc/yum.repos.d/docker-ce.repo. Fomu isiyo sahihi inashindwa kwa kutoa kosa la unknown-argument badala ya kufanya kitu kimya kimya, kwa hivyo hutakosa kuiona.
Faili hiyo ya repo huweka baseurl kwenye njia inayohusisha $releasever, na dnf hupanua kigezo hicho kutoka kwenye kifurushi chako cha release. Rocky Linux na AlmaLinux huweka kigezo hicho kuwa namba ya toleo kuu (major version), kwa hivyo 9 kwenye EL 9 na 10 kwenye EL 10, ndiyo maana hazina ya CentOS hutatuliwa kwa usahihi kwenye seva ya Rocky. Thibitisha upanuzi huo kabla ya kusakinisha:
sudo dnf repoinfo docker-ce-stableSoma mstari wa Repo-baseurl. Unapaswa kuishia na /9/x86_64/stable au /10/x86_64/stable. Ikiwa release yako inaweka $releasever kuwa toleo dogo kama 9.6, dnf itaripoti Status code: 404 kwa URL hiyo wakati inapopakua metadata. Rekebisha kwa kuhariri /etc/yum.repos.d/docker-ce.repo na kubadilisha $releasever na namba kuu pekee.
Sakinisha injini na plugin ya compose
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginVifurushi vitano, na kila kimoja kina kazi yake. docker-ce ndiyo daemon, dockerd. docker-ce-cli ndiyo amri ya docker unayoandika. containerd.io ndiyo runtime ya container inayoendeshwa na daemon. docker-buildx-plugin hujenga images. docker-compose-plugin hutoa docker compose kama subcommand.
Vifurushi hivi havijasakinisha binary ya docker-compose yenye kistari. Hiyo ilikuwa Compose v1, ambayo ilifikia mwisho wa maisha yake mwezi Julai 2023. Kila kitu kinachoitisha docker-compose kwa kistari kinahitaji kusasishwa kuwa docker compose kwa nafasi.
Usakinishaji wa kwanza husimama ili kuingiza ufunguo wa kusaini (signing key) wa Docker na kukuonyesha fingerprint yake. Ufunguo huo unatoka gpgkey=https://download.docker.com/linux/centos/gpg katika faili ya repo uliyoongeza hivi punde, kwa hivyo linganisha fingerprint inayochapishwa na dnf dhidi ya URL hiyo kabla ya kuikubali.
Kushindwa kimoja hutokea mara nyingi vya kutosha kutajwa. Ikiwa dnf inaripoti kuwa containerd.io inahitaji container-selinux na hakuna kinachotoa, hazina (repository) yako ya AppStream imezimwa. Tekeleza dnf repolist na uthibitishe kuwa appstream imeorodheshwa, kwa sababu hapo ndipo container-selinux inaposafirishwa kwenye EL 9 na EL 10.
Anzisha Docker na uthibitishe kuwa inafanya kazi
sudo systemctl enable --now docker
sudo systemctl status docker --no-pager
sudo docker run --rm hello-worldVifurushi vya RPM vya Docker huacha daemon ikiwa imesimama na imezimwa baada ya usakinishaji. Hii ndiyo sababu hatua hii inaonekana kwenye ukurasa wa Docker wa CentOS na si kwenye ukurasa wa Ubuntu, ambapo deb huanzisha huduma hiyo kwa ajili yako. Ukiruka enable, Docker itafanya kazi hadi reboot inayofuata, kisha itazimika na kuchukua kila container pamoja nayo.
systemctl status inapaswa kuonyesha Active: active (running). Container ya hello-world inapaswa kuchapisha This message shows that your installation appears to be working correctly. na kutoka. Ikiwa badala yake inachapisha hitilafu ya ruhusa kwenye /var/run/docker.sock, umesahau sudo, ambayo sehemu ya kundi la docker hapa chini inarekebisha.
Kagua plugin ya compose kando, kwa sababu ni kifurushi tofauti na kinaweza kukosekana wakati engine iko sawa:
docker compose versionJibu zuri linaonekana kama Docker Compose version v2.x.x. Kurudisha huduma zako baada ya reboot ni swali tofauti na kuwezesha daemon, na sera za kuanzisha upya huamua kama huduma za Compose zinarudi wakati wa boot.
Kwa nini bind mount inatoa hitilafu ya permission denied?
Rocky Linux na AlmaLinux huendesha SELinux (Security-Enhanced Linux) katika hali ya enforcing kwa chaguomsingi. Thibitisha hili kwa getenforce, ambayo huchapisha Enforcing.
Docker containers huendeshwa chini ya aina ya SELinux ya container_t, na aina hiyo inaweza tu kusoma na kuandika faili zilizopewa lebo ya container_file_t. Saraka uliyounda kwenye host hubeba lebo yoyote inayotokana na njia ya mzazi wake, ambayo si container_file_t. Container hukataliwa hata kama mmiliki, kundi na mode vinaonekana kuwa sahihi kutoka upande wa host. Izae upya kwa amri tatu:
sudo mkdir -p /srv/site
echo hello | sudo tee /srv/site/index.html
sudo docker run --rm -v /srv/site:/usr/share/nginx/html:ro nginx:alpine cat /usr/share/nginx/html/index.htmlContainer huchapisha:
cat: can't open '/usr/share/nginx/html/index.html': Permission deniedAmri mbili hukuonyesha sababu. ls -ldZ /srv/site huchapisha lebo, ambayo kwa njia iliyo chini ya /srv ni system_u:object_r:var_t:s0, si container_file_t. Kisha sudo ausearch -m avc -ts recent huchapisha rekodi ya ukaguzi ya kernel, inayojumuisha avc: denied { read }, uwanja wa scontext= unaotaja container_t, na uwanja wa tcontext= unaotaja lebo uliyoiangalia tu kwenye saraka. Kutolingana kati ya nyanja hizo mbili ndiyo sababu nzima.
Suluhisho ni kiambishi kwenye hoja ya volume. Docker hukupa lebo upya njia hiyo:
sudo docker run --rm -v /srv/site:/usr/share/nginx/html:ro,z nginx:alpine cat /usr/share/nginx/html/index.html:z katika herufi ndogo hubadilisha lebo ya maudhui kuwa shared, ili containers kadhaa ziweze kutumia saraka moja. :Z katika herufi kubwa hubadilisha lebo kuwa private na isiyoshirikiwa, iliyofungwa kwenye container moja, na container ya pili inayosoma njia hiyo hiyo hukataliwa. Tumia :z kwa chochote ambacho sidecar au container ya backup pia inakigusa. Tumia :Z kwa saraka ya database ambayo container moja inaimiliki.
Nyaraka za Docker zina onyo linalostahili kurudiwa, kwa sababu ubadilishaji wa lebo ni wa recursive. Bind-mounting saraka ya mfumo kama /home au /usr na :Z "hufanya mashine yako ya host kutofanya kazi na unaweza kuhitaji kubadilisha lebo za faili za mashine ya host kwa mikono". Elekeza viambishi hivi kwenye saraka ulizounda kwa ajili ya container, kamwe usielekeze kwenye njia ya mfumo.
Katika Compose kiambishi huenda kwenye string ile ile:
services:
web:
image: nginx:alpine
volumes:
- /srv/site:/usr/share/nginx/html:ro,zMipaka miwili ni rahisi kukwama nayo. Bendera ya --mount haiwezi kuweka lebo ya SELinux hata kidogo, kwa hivyo tumia -v unapohitaji moja. Named volumes hazihitaji kiambishi, kwa sababu Docker huweka lebo kwenye saraka inazounda chini ya /var/lib/docker/volumes yenyewe.
Usizime SELinux. Tumia sudo setenforce 0 kama jaribio la dakika moja tu: ikiwa container itafanya kazi, tatizo ni lebo na :z ndilo jibu. Iirudishe na sudo setenforce 1 mara moja. Kwenye Enterprise Linux, permission denied kwenye bind mount ina sababu mbili tofauti zinazoonekana sawa kutoka ndani ya container. Moja ni lebo ya SELinux. Nyingine ni umiliki wa kawaida wa mtumiaji na kundi wa namba, ambao ndio sababu ya kuwepo kwa vigezo vya PUID na PGID. ls -lnZ hukuonyesha mode, mmiliki wa namba na lebo katika mstari mmoja, ili uweze kujua ni kipi unachokabiliana nacho.
Kwa nini port iliyochapishwa inafikika wakati firewalld inaonekana imefungwa?
Firewalld ndiyo firewall chaguo-msingi kwenye Rocky Linux na AlmaLinux. Thibitisha kama inafanya kazi kwa kutumia sudo systemctl is-active firewalld. Ikiwa bado hujaisanidi kwenye seva hii, kufungua SSH na port ya web kwa kutumia firewalld ndiyo hatua ya kwanza, kwa sababu mshangao ufuatao unaeleweka tu unapokuwa na seti ya sheria za zone unayoweza kulinganisha nayo. Sasa chapisha port na uangalie kile firewalld inachokiona kuwa kiko wazi:
sudo docker run -d --name web -p 8080:80 nginx:alpine
sudo firewall-cmd --list-portsfirewall-cmd huchapisha mstari mtupu. Kutoka mashine nyingine, curl -I http://YOUR_SERVER_IP:8080/ inarudisha HTTP/1.1 200 OK. Port iko wazi kwa Internet na firewall yako haionyeshi chochote.
Sababu ni njia ambayo pakiti hupitia. Sheria za zone za firewalld huchuja trafiki inayoelekezwa kwa seva yenyewe. Port iliyochapishwa haijaelekezwa kwa seva: Docker huweka sheria ya destination NAT (network address translation) inayobadilisha destination kuwa anwani ya container kabla pakiti haijafika kwenye njia ya input ya seva, kwa hivyo kernel husambaza (forward) pakiti badala ya kuifikisha ndani. Docker kisha huweka interface zake za bridge kwenye zone ya firewalld inayoitwa docker ambayo target yake ni ACCEPT, na huongeza sera ya kusambaza inayoitwa docker-forwarding inayoruhusu kusambaza kutoka zone yoyote kwenda kwenye zone ya docker. Sheria zako za zone hazioni pakiti hiyo kamwe.
Suluhisho safi kabisa halihitaji sheria ya firewall. Funga upande wa seva wa uchapishaji kwenye loopback na uweke reverse proxy mbele yake:
sudo docker rm -f web
sudo docker run -d --name web -p 127.0.0.1:8080:80 nginx:alpine
curl -I http://127.0.0.1:8080/curl ya ndani inarudisha HTTP/1.1 200 OK na ombi lilelile kutoka mashine nyingine haliunganishi tena. Kitu chochote kisicho na anwani ya seva katika argument ya -p huchapishwa kwenye kila interface, kwa hivyo chukulia -p 8080:80 tupu kama uamuzi wa kufichua huduma hiyo hadharani.
Unapohitaji huduma ifikike kutoka anwani fulani na si nyingine, Docker hukutengea chain. DOCKER-USER huchakatwa kabla ya sheria za accept za Docker, kwa hivyo sheria unayoiweka hapo hudumu hata Docker ikianzishwa upya na kuandika upya chain zake:
sudo iptables -I DOCKER-USER -i enp1s0 ! -s 203.0.113.10 -j DROP
sudo iptables -S DOCKER-USERChukua jina la interface kutoka ip route show default badala ya kudhani eth0, kwa sababu image za sasa za EL hutumia majina kama enp1s0 au ens3. Kwenye Rocky na AlmaLinux amri ya iptables ni safu ya utangamano juu ya nftables, na chain za Docker huonekana kupitia hiyo. Sheria zilizoongezwa kwa njia hii hupotea baada ya reboot isipokuwa ukiizihifadhi, kwa hivyo ziandike kwenye systemd unit pindi utakapoziridhia.
Docker Engine 28.0, iliyotolewa mwaka 2025, iliziba mwanya mwingine: ufikiaji wa moja kwa moja wa routed kwenye port za container ambazo hazijawahi kuchapishwa sasa umezuiwa kwenye chain ya DOCKER. Mabadiliko hayo hayaathiri port zilizochapishwa, kwa hivyo kila kitu hapo juu bado kinatumika kwenye matoleo ya sasa. Tabia moja ya kiutendaji inafaa kuijenga: baada ya kila sudo firewall-cmd --reload, jaribu tena port iliyochapishwa. Ikiwa imeacha kujibu, sudo systemctl restart docker husakinisha upya sheria za Docker.
Wasimamizi wa Ubuntu hukutana na kikwazo hicho hicho kupitia zana tofauti, ambayo ndiyo kwa nini port za Docker zilizochapishwa hupuuza sheria za ufw. Njia ya NAT ndiyo sababu katika visa vyote viwili. Ni firewall iliyo mbele yake pekee inayobadilika.
Ongeza mtumiaji asiye root kwenye kundi la docker
Kuandika sudo kabla ya kila amri ya docker huchosha, na kundi la docker huondoa uhitaji huo:
sudo usermod -aG docker $USER
newgrp docker
docker run --rm hello-worldusermod -aG huhariri /etc/group, lakini shell yako ya sasa tayari ina orodha yake ya makundi, kwa hivyo mabadiliko hayatafanya kazi hadi upate shell mpya. newgrp docker huanzisha shell ikiwa na kundi hilo ili uweze kufanya majaribio mara moja. Sessions mpya za SSH huchukua mabadiliko hayo zenyewe.
Elewa vyema kile ambacho kundi hilo hutoa. Uanachama hutoa ruhusa ya kuandika kwenye /var/run/docker.sock, na chochote kinachoweza kuwasiliana na socket hiyo kinaweza kuamuru daemon kuanzisha container inayopachika (mount) mfumo wa faili wa seva. Amri moja inaonyesha maana ya hili:
docker run --rm -v /:/host alpine wc -l /host/etc/shadowHiyo inasoma faili ambayo root pekee anaweza kuisoma, kutoka kwa akaunti isiyo na haki za sudo. Nyaraka za Docker zenyewe za baada ya usakinishaji zinasema jambo lilelile: kundi la docker hutoa marupurupu sawa na root. Ongeza akaunti kwenye kundi hilo ikiwa tu ungeipa akaunti hiyo sudo. Ikiwa unaweka akaunti kwenye seva mpya, amua hili sambamba na usanidi wa mtumiaji mwenye haki ndogo kwenye VPS badala ya kufanya hivyo baadaye.
Docker pia inatoa mode ya rootless inayoiendesha daemon kama mtumiaji asiye na marupurupu. Hii ni njia tofauti ya usakinishaji na inabadilisha jinsi storage drivers na ports zilizo chini ya 1024 zinavyofanya kazi, kwa hivyo ipange kama mradi wa pekee badala ya kuichukulia kama flag unayoongeza baadaye.
Hatua zinazofuata
Sasa unayo injini, plugin ya compose, huduma inayoweza kujiendesha baada ya reboot, na tabia tatu mahususi za EL zilizoelezwa hapo juu. Hatua inayofuata ni compose.yaml kwa kila huduma, na muundo wa faili ya Compose inaelezea muundo wa faili na amri zinazoiendesha. Ikiwa hii ni mara yako ya kwanza kutumia host ya container, kuendesha Docker kwenye VPS kunashughulikia masuala ya ukubwa wa rasilimali, hifadhi, na usafi wa image ambayo mwongozo huu haukuyagusia.
FAQ
Je, hazina (repository) ya Docker ya CentOS inafanya kazi kwenye Rocky Linux na AlmaLinux?
Ndiyo. Ongeza https://download.docker.com/linux/centos/docker-ce.repo kwa kutumia dnf config-manager. baseurl iliyo kwenye faili hiyo ina $releasever, na Rocky Linux pamoja na AlmaLinux huipanua hiyo kuwa namba ya toleo kuu (major version), kwa hivyo mashine ya EL 9 inaelekea kwenye mti wa CentOS 9 na mashine ya EL 10 kwenye mti wa CentOS 10. Thibitisha upanuzi huo kwa sudo dnf repoinfo docker-ce-stable na usome mstari wa Repo-baseurl. Status code: 404 wakati dnf inapopakua metadata inamaanisha kuwa kigezo hicho kilipanuka hadi toleo dogo (point release), na kuhariri /etc/yum.repos.d/docker-ce.repo ili kutumia namba kuu pekee kutatatua tatizo hilo.
Je, Docker na podman vinaweza kusakinishwa kwenye seva moja?
Nyaraka za Docker zinaorodhesha podman na runc kama vifurushi vinavyokinzana na zinakuelekeza kuondoa vyote viwili kabla ya kusakinisha Docker Engine. Mgongano halisi ni kifurushi cha podman-docker, ambacho kinamiliki /usr/bin/docker na kubadilisha kila amri ya docker kuwa amri ya podman. Tekeleza rpm -qf "$(command -v docker)" ili kuona ni kifurushi kipi kinamiliki njia hiyo. Ikiwa matokeo yanaanza na podman-docker, basi podman ndiyo inayojibu. Kuweka injini zote mbili si usanidi unaoungwa mkono na Docker, kwa hivyo kwenye seva muhimu, chagua moja.
Kwa nini kontena langu linapata "permission denied" kwenye bind mount?
SELinux inafanya kazi kwa chaguo-msingi kwenye Rocky Linux na AlmaLinux. Makontena huendeshwa kama aina ya container_t na yanaweza kugusa tu faili zilizowekewa lebo ya container_file_t, kwa hivyo saraka uliyounda ina lebo isiyo sahihi na ufikiaji unakataliwa bila kujali mmiliki au mode yake. Thibitisha hili kwa ls -ldZ kwenye njia ya host na sudo ausearch -m avc -ts recent, ambayo huchapisha avc: denied ikiwa na muktadha miwili isiyolingana. Ongeza :z kwenye hoja ya volume kwa maudhui yanayoshirikiwa kati ya makontena, au :Z kwa maudhui ya faragha ya kontena moja. Usielekeze kamwe :Z kwenye /home au /usr, kwa sababu uwekaji lebo upya ni wa kurudia (recursive) na utaharibu host.
Je, ninahitaji kufungua port kwenye firewalld ili kuchapisha port ya kontena?
Hapana, na hilo ndilo tatizo. Kanuni ya NAT ya Docker hubadilisha anwani ya lengwa kabla ya pakiti kufika kwenye njia ya kuingia ya host, kwa hivyo kanuni za zone za firewalld haziiangali. Docker pia huweka madaraja yake (bridges) kwenye zone ya firewalld inayoitwa docker yenye lengo la ACCEPT. Kontena lililoanzishwa kwa -p 8080:80 linaweza kufikiwa kutoka kwenye Internet wakati sudo firewall-cmd --list-ports haichapishi chochote. Chapisha kwenye anwani mahususi kwa kutumia -p 127.0.0.1:8080:80 wakati host pekee ndiyo inapaswa kufikia huduma hiyo, au ingiza kanuni za kuchuja kwenye mnyororo wa DOCKER-USER, ambao Docker huuchakata kabla ya kanuni zake za kukubali (accept rules).
Je, kuongeza mtumiaji wangu kwenye kundi la docker ni salama?
Hii inatoa ufikiaji wa root. Mwanachama wa kundi la docker anaweza kuandika kwenye /var/run/docker.sock, na docker run --rm -v /:/host alpine wc -l /host/etc/shadow kisha husoma faili ya root pekee kutoka kwa akaunti isiyo na haki za sudo. Nyaraka za baada ya usakinishaji za Docker zinathibitisha usawa huo. Ongeza akaunti ambazo tayari ungeziamini kwa sudo pekee, na endelea kutumia sudo docker kwa akaunti za pamoja au za huduma. Rootless mode ndiyo njia mbadala unapohitaji makontena chini ya mtumiaji asiye na haki za juu, na ni njia tofauti ya usakinishaji badala ya kuwa mpangilio tu.