news 2026/8/9 19:33:03

Docker 容器中修改 root 密码的正确方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker 容器中修改 root 密码的正确方法

在使用 Docker 容器时,有时我们需要在容器创建后动态修改其中用户的密码,尤其是root用户的密码。很多人尝试使用docker exec命令直接执行chpasswd,但常常因为命令格式或 shell 解析问题导致密码未成功更新。本文将详细介绍如何正确使用docker exec修改容器内 root 密码,并提供多个可复用的示例。


一、背景说明

在构建镜像时,我们通常会在Dockerfile中设置初始密码,例如:

RUN echo "root:root" | chpasswd

但当容器已经运行起来后,如果需要临时或动态修改密码(比如出于安全考虑),就不能再修改Dockerfile了。此时,我们需要借助docker exec命令进入容器执行密码修改操作。


二、常见错误写法

很多初学者会这样写:

dockerexec-it centos7.5 root:newpassword|chpasswd

这是错误的!

原因:

  • docker exec后面必须指定要执行的命令(如/bin/bashchpasswd)。
  • 上述命令试图在宿主机上执行chpasswd,而不是在容器内部。
  • 管道|在 shell 中由宿主机解析,不会传递到容器内。

三、正确做法:使用/bin/bash -c包裹命令

✅ 方法 1:使用chpasswd批量修改(推荐)

dockerexec-it centos7-novnc2 /bin/bash -c"echo 'root:123456' | chpasswd"

注意:这里使用单引号包裹root:123456,避免双引号在 shell 中被提前解析。

如果你希望看到执行成功的提示,可以加上&& echo 'success'

dockerexec-it centos7-novnc2 /bin/bash -c"echo 'root:123456' | chpasswd && echo 'success'"

✅ 方法 2:使用passwd命令(需交互式输入,不推荐用于脚本)

dockerexec-i c0d /bin/bash -c"passwd root"

⚠️ 注意:

  • -i表示保持 STDIN 打开(即使没有-t)。
  • 此方式会进入交互式密码输入,不适合自动化脚本
  • 如果你在脚本中使用,建议改用chpasswd

四、完整示例

假设你有一个名为my-centos的正在运行的 CentOS 容器:

# 修改 root 密码为 MyNewPass123!dockerexec-it my-centos /bin/bash -c"echo 'root:MyNewPass123!' | chpasswd"# 验证是否成功(可选)dockerexec-it my-centos /bin/bash -c"grep root /etc/shadow"

💡 提示:/etc/shadow中 root 行的第二字段不应是!*,否则表示密码被锁定。


五、注意事项

  1. 引号嵌套问题
    外层用双引号时,内部字符串建议用单引号,避免 shell 转义混乱:

    # 正确"echo 'root:pass' | chpasswd"# 错误(可能报错)"echo "root:pass" | chpasswd"
  2. 容器必须安装chpasswd
    大多数基于centosubuntu的镜像默认包含chpasswd。若使用极简镜像(如alpine),需先安装shadow包。

  3. 安全性提醒
    密码明文出现在命令行中,可能会被history记录。生产环境中建议:

    • 使用环境变量传入密码
    • 或通过挂载加密文件的方式处理

六、总结

方法是否推荐适用场景
echo 'user:pass' | chpasswd✅ 强烈推荐自动化、脚本、批量修改
passwd username⚠️ 谨慎使用临时手动调试

记住核心语法

dockerexec-it<容器名>/bin/bash -c"echo '用户名:新密码' | chpasswd"

✅ 按照上述方法操作,即可成功在已运行的 Docker 容器中修改 root 或其他用户的密码!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 17:52:55

基于python的学习资源分享系统vue3

目录 Python学习资源分享系统&#xff08;Vue3&#xff09;摘要 开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; Python学习资源分享系统&#xff08;Vue3&#xff09;摘要 系统概述 该系统…

作者头像 李华
网站建设 2026/8/5 18:12:17

45年数论猜想被GPT-5.2 Pro独立完成证明,陶哲轩:没犯任何错误

45年数论猜想被GPT-5.2 Pro独立完成证明&#xff0c;陶哲轩&#xff1a;没犯任何错误 关注前沿科技 量子位 2026年1月19日 15:00 北京 梦晨 发自 凹非寺 量子位 | 公众号 QbitAI AI证明数学猜想&#xff0c;这次来真的了。 OpenAI最新模型GPT-5.2 Pro刚刚独立证明了一道埃尔…

作者头像 李华
网站建设 2026/8/9 12:27:16

演讲回顾|Apache Pulsar x AI Agent:智能系统消息基础架构

本文整理自 翟佳 在2025 GOTC 全球开源技术峰会上的演讲&#xff0c;一起来看 Pulsar 如何赋能多 Agent 协同&#xff5e; Pulsar 的云原生架构 Pulsar 的架构演进深植于云原生技术的发展脉络。其设计旨在满足现代应用对运营效率的高要求&#xff0c;技术根源可追溯至 20 世纪 …

作者头像 李华
网站建设 2026/7/31 3:57:28

2026年【具身智能】微信群成立!

点击下方卡片&#xff0c;关注“CVer”公众号AI/CV重磅干货&#xff0c;第一时间送达具身智能&#xff1a;人工智能的下一个浪潮&#xff01;今年首次被写入《政府工作报告》中&#xff0c;已经成为国家未来重点培育产业。市场方面&#xff0c;具身智能近一年融资更是爆火&…

作者头像 李华
网站建设 2026/8/8 17:45:40

sprintf在嵌入式开发中的5个典型应用案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个嵌入式系统模拟器&#xff0c;演示sprintf在以下场景的应用&#xff1a;1)将ADC采样值格式化为带单位的字符串(如"电压:3.3V")&#xff1b;2)组装Modbus协议数据…

作者头像 李华
网站建设 2026/7/31 4:13:27

如何用3步解决C盘爆满难题:Windows Cleaner实战指南

如何用3步解决C盘爆满难题&#xff1a;Windows Cleaner实战指南 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 诊断磁盘健康状态 识别C盘爆红的5大典型症状 当…

作者头像 李华