讓非root用戶構(gòu)建Docker鏡像的三種方法
前言
在默認(rèn)情況下,Docker 需要 root
權(quán)限或 sudo
才能運(yùn)行。這對于日常開發(fā)和 CI/CD 流水線可能不夠方便,也可能帶來安全隱患。那么,如何讓 非 root 用戶 也能構(gòu)建和運(yùn)行 Docker 容器呢?
本篇文章將介紹 三種方法 來實(shí)現(xiàn)這一目標(biāo),并推薦最佳實(shí)踐。
方法 1:將用戶加入 Docker 組(推薦)
Docker 允許 docker
組的用戶運(yùn)行 Docker 命令,因此最簡單的方法是將你的用戶加入 docker
組。
- 創(chuàng)建 Docker 組(如果不存在)
sudo groupadd docker
- 將用戶加入 Docker 組
sudo usermod -aG docker $USER
- 如果你要添加其他用戶,替換 $USER 為具體的用戶名:
sudo usermod -aG docker your-username
- 重新登錄使權(quán)限生效
執(zhí)行以下命令讓組權(quán)限立即生效,或者注銷并重新登錄:
newgrp docker
- 測試是否生效
docker ps
如果能正確輸出 Docker 運(yùn)行中的容器列表,而 不需要 sudo
,則說明配置成功。
方法 2:使用 sudo 運(yùn)行 Docker(不推薦)
如果你不想修改用戶組,可以在每次執(zhí)行 Docker 命令時使用 sudo
:
sudo docker build -t myimage .
但這樣使用起來不方便,并且某些 CI/CD 或自動化腳本可能不兼容 sudo,所以 不推薦 這種方式。
方法 3:使用 Docker Rootless 模式
Docker 提供了 Rootless Mode(無特權(quán)模式),允許普通用戶運(yùn)行 Docker 容器,而無需 root 權(quán)限。
- 安裝 Rootless Docker
curl -fsSL https://get.docker.com/rootless | sh
- 設(shè)置環(huán)境變量
安裝完成后,執(zhí)行以下命令來配置環(huán)境變量:
export PATH=$HOME/bin:$PATH export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
讓這些配置永久生效:
echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc echo 'export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock' >> ~/.bashrc source ~/.bashrc
- 啟動 Rootless Docker
systemctl --user start docker
Rootless 模式適用于不允許修改系統(tǒng)用戶組的環(huán)境,比如某些企業(yè)級服務(wù)器。
總結(jié)
方法 | 適用場景 | 推薦級 |
---|---|---|
添加用戶到 docker 組 | 適用于大多數(shù)情況,安全且便捷 | ?????(推薦) |
使用 sudo 運(yùn)行 Docker | 適用于臨時使用,但不夠方便 | ???(不推薦) |
Docker Rootless 模式 | 適用于不能修改用戶組的環(huán)境 | ???? |
最佳實(shí)踐
如果你的服務(wù)器上有多個開發(fā)人員共用 Docker,建議使用 docker
組方式,這樣既安全又方便。
你可以使用以下命令快速完成設(shè)置:
sudo groupadd docker sudo usermod -aG docker $USER newgrp docker docker ps # 測試是否生效
如果 docker ps
仍然報錯,嘗試 重新登錄系統(tǒng) 或 重啟 Docker:
sudo systemctl restart docker
這樣,你的非 root 用戶就可以 直接運(yùn)行 Docker 并構(gòu)建鏡像 了!
到此這篇關(guān)于讓非root用戶構(gòu)建Docker鏡像的三種方法的文章就介紹到這了,更多相關(guān)非root用戶構(gòu)建Docker鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker部署SpringBoot項目,本地運(yùn)行正常,部署至服務(wù)器報錯zip file close
這篇文章主要介紹了Docker部署SpringBoot項目,本地運(yùn)行正常,部署至服務(wù)器報錯zip file closed問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06利用寶塔面板和docker快速部署網(wǎng)站的基本流程
當(dāng)你有了一臺服務(wù)器,就會折騰往這臺服務(wù)器上部署各種好玩的網(wǎng)站,本文將以部署filebrowser舉例介紹網(wǎng)站部署的基本流程,感興趣的朋友一起看看吧2023-12-12在docker容器中運(yùn)行flask應(yīng)用過程
這篇文章主要介紹了在docker容器中運(yùn)行flask應(yīng)用過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06解決Docker x509 insecure registry的問題
這篇文章主要介紹了解決Docker x509 insecure registry的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03在Dockerfile中copy和add的區(qū)別及說明
COPY和ADD都是Dockerfile中用于文件復(fù)制的命令,但COPY僅用于本地文件或目錄的復(fù)制,不支持自動解壓縮;而ADD除了復(fù)制本地文件或目錄外,還支持解壓縮和從URL下載文件,在一般情況下,建議使用COPY命令2025-03-03