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

 更新时间:2026年01月26日 08:53:00   作者:weixin_46244623  
在使用 Docker 容器时,有时我们需要在容器创建后动态修改其中用户的密码,尤其是 root 用户的密码,本文详细介绍了如何使用dockerexec命令在运行中的Docker容器中动态修改root用户的密码,并提供了多个示例,需要的朋友可以参考下

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

一、背景说明

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

RUN echo "root:root" | chpasswd

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

二、常见错误写法

很多初学者会这样写:

docker exec -it centos7.5 root:newpassword | chpasswd

这是错误的!

原因:

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

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

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

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

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

如果你希望看到执行成功的提示,可以加上 && 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)。
  • 此方式会进入交互式密码输入,不适合自动化脚本
  • 如果你在脚本中使用,建议改用 chpasswd

四、完整示例

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

# 修改 root 密码为 MyNewPass123!
docker exec -it my-centos /bin/bash -c "echo 'root:MyNewPass123!' | chpasswd"

# 验证是否成功(可选)
docker exec -it my-centos /bin/bash -c "grep root /etc/shadow"

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

五、注意事项

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

# 正确
"echo 'root:pass' | chpasswd"
# 错误(可能报错)
"echo "root:pass" | chpasswd"

容器必须安装 chpasswd
大多数基于 centosubuntu 的镜像默认包含 chpasswd。若使用极简镜像(如 alpine),需先安装 shadow 包。

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

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

六、总结

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

记住核心语法

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

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

到此这篇关于Docker容器中修改root密码的正确方法的文章就介绍到这了,更多相关Docker修改root密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何恢复docker容器数据

    如何恢复docker容器数据

    项目测试环境数据库数据丢失, 我们可以利用数据卷可以进行恢复数据,下面我来记录一下,希望此文章对各位有所帮助
    2021-05-05
  • 解决Docker启动Elasticsearch7.x报错的问题

    解决Docker启动Elasticsearch7.x报错的问题

    这篇文章主要介绍了解决Docker启动Elasticsearch7.x报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Jetson docker环境搭建步骤

    Jetson docker环境搭建步骤

    本文给大家介绍Jetson docker环境搭建步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-10-10
  • Docker安装Nginx并修改Nginx配置文件的方法详解

    Docker安装Nginx并修改Nginx配置文件的方法详解

    这篇文章主要给大家介绍了关于Docker安装Nginx并修改Nginx配置文件的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • 在Ubuntu 16.04上用Docker Swarm和DigitalOcean创建一个Docker容器集群的方法

    在Ubuntu 16.04上用Docker Swarm和DigitalOcean创建一个Docker容器集群的方法

    这篇文章主要介绍了在Ubuntu 16.04上用Docker Swarm和DigitalOcean创建一个Docker容器集群的方法,需要的的朋友参考下吧
    2017-01-01
  • 关于Docker的基础概念分享

    关于Docker的基础概念分享

    Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于 Google公司推出的Go语言实现。项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub上进行维护。
    2017-01-01
  • docker在Linux环境下的安装教程

    docker在Linux环境下的安装教程

    这篇文章主要介绍了docker在Linux环境下的安装教程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • docker images本地迁移的实现

    docker images本地迁移的实现

    这篇文章主要介绍了docker images本地迁移的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 迁移Docker中MySQL容器的全过程

    迁移Docker中MySQL容器的全过程

    在这篇文章中,我们将介绍如何将在 Docker 中运行的 MySQL 容器从一台机器(我们称之为A机器)迁移到另一台机器(我们称之为B机器),这个过程主要包括五个步骤:提交容器为镜像,保存镜像为 tar 包等,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2023-12-12
  • docker版es、milvus、minio启动命令详解

    docker版es、milvus、minio启动命令详解

    这篇文章主要介绍了docker版es、milvus、minio启动命令详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11

最新评论