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

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

快速排查步骤

  1. 检查user_data执行日志:cat /var/log/cloud-init-output.log
  2. 验证Docker服务状态:systemctl status docker
  3. 确认ssm-user组权限:id ssm-user(输出中需包含docker组)
  4. 临时加载组权限测试:newgrp docker && docker ps

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 12:06:43