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

