You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bash脚本自动化修改Docker容器内的密码?

问题分析与解决

脚本错误原因

第一种脚本问题

  1. 变量赋值语法错误:a = date... 中等号两侧不能有空格,Bash变量赋值必须写成变量名=$(命令)的形式,否则会被识别为命令执行。
  2. Docker命令执行方式错误:docker exec要执行容器内命令时,必须用bash -c "命令串",直接写bash 'echo cd /'会让bash把字符串当作脚本文件查找,导致"找不到文件"的错误。
  3. 命令执行环境错误:htpasswd命令在宿主机执行,但实际需要操作容器内的user.passwd文件,路径和环境都不匹配。

第二种脚本问题

docker exec -u 0 -it c1 bash会进入容器的交互式终端,脚本会暂停在此处,后续所有命令只有在你退出容器后才会在宿主机执行,完全无法完成容器内的操作。

正确脚本实现

# 1. 重启容器
docker restart c1

# 2. 生成32位随机密码,注意变量赋值无空格
PASSWORD=$(date +%s | sha256sum | base64 | head -c 32)

# 3. 一次性在容器内执行切换目录+修改密码操作
# -u 0 以root身份执行
# bash -c "命令串" 传递要执行的容器内命令
# echo 密码 | htpasswd -B - - 从标准输入读取密码,避免明文暴露
docker exec -u 0 c1 bash -c "cd / && echo '$PASSWORD' | htpasswd -B - user.passwd webdav"

细节说明

  • 如果user.passwd文件不存在,需要添加-c参数创建文件:
    docker exec -u 0 c1 bash -c "cd / && echo '$PASSWORD' | htpasswd -B -c - user.passwd webdav"
    
  • -B参数使用bcrypt加密密码,比默认加密方式更安全
  • 去掉-it参数,因为脚本是非交互式执行,避免终端交互冲突

内容的提问来源于stack exchange,提问作者Erling Haaland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:15:17