Docker容器中修改root密碼的正確方法
在使用 Docker 容器時(shí),有時(shí)我們需要在容器創(chuàng)建后動態(tài)修改其中用戶的密碼,尤其是 root 用戶的密碼。很多人嘗試使用 docker exec 命令直接執(zhí)行 chpasswd,但常常因?yàn)槊罡袷交?shell 解析問題導(dǎo)致密碼未成功更新。本文將詳細(xì)介紹如何正確使用 docker exec 修改容器內(nèi) root 密碼,并提供多個(gè)可復(fù)用的示例。
一、背景說明
在構(gòu)建鏡像時(shí),我們通常會在 Dockerfile 中設(shè)置初始密碼,例如:
RUN echo "root:root" | chpasswd
但當(dāng)容器已經(jīng)運(yùn)行起來后,如果需要臨時(shí)或動態(tài)修改密碼(比如出于安全考慮),就不能再修改 Dockerfile 了。此時(shí),我們需要借助 docker exec 命令進(jìn)入容器執(zhí)行密碼修改操作。
二、常見錯誤寫法
很多初學(xué)者會這樣寫:
docker exec -it centos7.5 root:newpassword | chpasswd
? 這是錯誤的!
原因:
docker exec后面必須指定要執(zhí)行的命令(如/bin/bash或chpasswd)。- 上述命令試圖在宿主機(jī)上執(zhí)行
chpasswd,而不是在容器內(nèi)部。 - 管道
|在 shell 中由宿主機(jī)解析,不會傳遞到容器內(nèi)。
三、正確做法:使用/bin/bash -c包裹命令
方法 1:使用chpasswd批量修改(推薦)
docker exec -it centos7-novnc2 /bin/bash -c "echo 'root:123456' | chpasswd"
注意:這里使用 單引號 包裹 root:123456,避免雙引號在 shell 中被提前解析。
如果你希望看到執(zhí)行成功的提示,可以加上 && echo 'success':
docker exec -it centos7-novnc2 /bin/bash -c "echo 'root:123456' | chpasswd && echo 'success'"
方法 2:使用passwd命令(需交互式輸入,不推薦用于腳本)
docker exec -i c0d /bin/bash -c "passwd root"
注意:
-i表示保持 STDIN 打開(即使沒有-t)。- 此方式會進(jìn)入交互式密碼輸入,不適合自動化腳本。
- 如果你在腳本中使用,建議改用
chpasswd。
四、完整示例
假設(shè)你有一個(gè)名為 my-centos 的正在運(yùn)行的 CentOS 容器:
# 修改 root 密碼為 MyNewPass123! docker exec -it my-centos /bin/bash -c "echo 'root:MyNewPass123!' | chpasswd" # 驗(yàn)證是否成功(可選) docker exec -it my-centos /bin/bash -c "grep root /etc/shadow"
提示:/etc/shadow 中 root 行的第二字段不應(yīng)是 ! 或 *,否則表示密碼被鎖定。
五、注意事項(xiàng)
引號嵌套問題
外層用雙引號時(shí),內(nèi)部字符串建議用單引號,避免 shell 轉(zhuǎn)義混亂:
# 正確 "echo 'root:pass' | chpasswd" # 錯誤(可能報(bào)錯) "echo "root:pass" | chpasswd"
容器必須安裝 chpasswd
大多數(shù)基于 centos、ubuntu 的鏡像默認(rèn)包含 chpasswd。若使用極簡鏡像(如 alpine),需先安裝 shadow 包。
安全性提醒
密碼明文出現(xiàn)在命令行中,可能會被 history 記錄。生產(chǎn)環(huán)境中建議:
- 使用環(huán)境變量傳入密碼
- 或通過掛載加密文件的方式處理
六、總結(jié)
| 方法 | 是否推薦 | 適用場景 |
|---|---|---|
echo 'user:pass' | chpasswd | 強(qiáng)烈推薦 | 自動化、腳本、批量修改 |
passwd username | 謹(jǐn)慎使用 | 臨時(shí)手動調(diào)試 |
記住核心語法:
docker exec -it <容器名> /bin/bash -c "echo '用戶名:新密碼' | chpasswd"
按照上述方法操作,即可成功在已運(yùn)行的 Docker 容器中修改 root 或其他用戶的密碼!
到此這篇關(guān)于Docker容器中修改root密碼的正確方法的文章就介紹到這了,更多相關(guān)Docker修改root密碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Docker Compose搭建 Confluence的教程
本文將介紹如何使用 Docker Compose 快速搭建 Confluence 、以及如何和 Traefik 一同使用,如果你看過之前的內(nèi)容,跟隨本文應(yīng)該能在十分鐘內(nèi)解決戰(zhàn)斗,感興趣的朋友快來看看吧2021-06-06
docker搭建odoo16開發(fā)環(huán)境的實(shí)現(xiàn)
Odoo是全球流行的開源企業(yè)管理套件,本文主要介紹了docker搭建odoo16開發(fā)環(huán)境的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
Docker+K8S 集群環(huán)境搭建及分布式應(yīng)用部署
這篇文章主要介紹了Docker+K8S 集群環(huán)境搭建及分布式應(yīng)用部署,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
docker save鏡像時(shí)進(jìn)行g(shù)zip壓縮方式
文章介紹了三種Docker鏡像壓縮方法:管道壓縮(推薦,使用gzip/pigz,速度快)、xz壓縮(高壓縮比但慢)、及先保存再壓縮(不推薦,占空間),建議日常用管道gzip,傳輸用xz,避免直接保存未壓縮文件2025-08-08
docker-compose部署MySQL8的實(shí)現(xiàn)
本文主要介紹了docker-compose部署MySQL8的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11
手工制作docker鏡像-包含多個(gè)服務(wù)ssh+nginx
這篇文章主要介紹了手工制作docker鏡像-包含多個(gè)服務(wù)ssh+nginx,需要的朋友可以參考下2024-07-07

