Terraform部署AWS EC2实例:SSM用户执行Docker命令报错排查
问题排查:Session Manager连接EC2后Docker无法访问的原因及解决
核心原因及对应解决方案
1. ssm-user组权限未在当前会话生效
usermod -aG docker ssm-user仅修改用户的永久组配置,当前已建立的Session Manager会话不会自动加载新的组权限。此时执行docker ps时,ssm-user还不属于docker组,导致无权限访问/var/run/docker.sock。
- 临时解决:在当前会话执行
newgrp docker,立即加载新组权限后再执行docker ps。 - 永久解决:退出当前Session Manager连接,重新建立会话,新会话会自动加载更新后的组配置。
2. user_data脚本执行失败
user_data的执行过程会记录在/var/log/cloud-init-output.log中,若脚本某一步报错(如yum源故障、docker安装失败),会导致Docker未正确安装或服务未启动。
- 排查方法:在Session Manager中执行
cat /var/log/cloud-init-output.log,查看脚本每一步的执行结果,定位报错环节。
3. Docker服务未正常启动
即使脚本执行了systemctl start docker,仍可能因系统依赖缺失、资源不足等原因导致服务启动失败。
- 排查方法:执行
systemctl status docker查看服务状态,若显示未运行,执行journalctl -u docker查看详细错误日志,针对性修复(如安装缺失依赖)。
4. /var/run/docker.sock权限配置无效
Docker服务启动时会自动重置/var/run/docker.sock的所有者为root:docker,脚本中chown ssm-user:docker /var/run/docker.sock的修改会被覆盖,且此操作无必要——只要ssm-user属于docker组,就拥有该sock文件的读写权限。
- 修复方法:删除脚本中
sudo chown ssm-user:docker /var/run/docker.sock这一行,仅保留usermod -aG docker ssm-user配置组权限。
修正后的user_data脚本
#!/bin/bash set -ex sudo yum update -y sudo amazon-linux-extras install docker -y sudo usermod -a -G docker ssm-user # 提前创建.docker目录并设置权限,避免首次执行docker命令时报权限错误 sudo mkdir -p /home/ssm-user/.docker sudo chown ssm-user:ssm-user /home/ssm-user/.docker -R sudo chmod g+rwx /home/ssm-user/.docker -R sudo systemctl enable docker sudo systemctl start docker
快速排查步骤
- 检查user_data执行日志:
cat /var/log/cloud-init-output.log - 验证Docker服务状态:
systemctl status docker - 确认ssm-user组权限:
id ssm-user(输出中需包含docker组) - 临时加载组权限测试:
newgrp docker && docker ps
内容的提问来源于stack exchange,提问作者user1911
相关产品推荐
相关产品推荐

