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 Compose搭建 Confluence的教程

    使用Docker Compose搭建 Confluence的教程

    本文将介绍如何使用 Docker Compose 快速搭建 Confluence 、以及如何和 Traefik 一同使用,如果你看过之前的内容,跟随本文应该能在十分钟内解决战斗,感兴趣的朋友快来看看吧
    2021-06-06
  • docker搭建odoo16开发环境的实现

    docker搭建odoo16开发环境的实现

    Odoo是全球流行的开源企业管理套件,本文主要介绍了docker搭建odoo16开发环境的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • Docker+K8S 集群环境搭建及分布式应用部署

    Docker+K8S 集群环境搭建及分布式应用部署

    这篇文章主要介绍了Docker+K8S 集群环境搭建及分布式应用部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 从0开始了解Docker入门(小结)

    从0开始了解Docker入门(小结)

    本篇文章主要介绍了从0开始了解Docker(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • docker save镜像时进行gzip压缩方式

    docker save镜像时进行gzip压缩方式

    文章介绍了三种Docker镜像压缩方法:管道压缩(推荐,使用gzip/pigz,速度快)、xz压缩(高压缩比但慢)、及先保存再压缩(不推荐,占空间),建议日常用管道gzip,传输用xz,避免直接保存未压缩文件
    2025-08-08
  • docker安装clickhouse过程详解

    docker安装clickhouse过程详解

    这篇文章主要为大家介绍了docker安装clickhouse过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • docker-compose部署MySQL8的实现

    docker-compose部署MySQL8的实现

    本文主要介绍了docker-compose部署MySQL8的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • 手工制作docker镜像-包含多个服务ssh+nginx

    手工制作docker镜像-包含多个服务ssh+nginx

    这篇文章主要介绍了手工制作docker镜像-包含多个服务ssh+nginx,需要的朋友可以参考下
    2024-07-07
  • idea使用docker生成镜像的详细步骤

    idea使用docker生成镜像的详细步骤

    本文详细介绍了在Windows环境下使用Docker Desktop进行Docker镜像的打包、运行、导出以及在Linux系统中的导入操作,重点讲解了如何在Windows中安装Docker Desktop,构建Docker镜像的步骤,文中介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • docker部署mysql问题

    docker部署mysql问题

    这篇文章主要介绍了docker部署mysql问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论