docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker修改root密码

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

作者: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

这是错误的!

原因:

三、正确做法:使用/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"

注意:

四、完整示例

假设你有一个名为 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密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文