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

如何在EC2实例启动时自动运行Docker镜像?

EC2实例启动时自动运行Docker镜像的实现方法

方法一:配置Systemd服务(最可靠方案)

这种方式能保证Docker服务启动后再拉起容器,还能在容器意外退出时自动重启。

  • 创建systemd服务文件:
    sudo nano /etc/systemd/system/my-docker-container.service
    
    写入以下内容,替换[你的镜像名]为实际镜像,可按需添加端口映射、挂载卷等参数:
    [Unit]
    Description=Auto-run Docker Container
    Requires=docker.service
    After=docker.service
    
    [Service]
    Restart=always
    ExecStart=/usr/bin/docker run --name my-container [你的镜像名]
    ExecStop=/usr/bin/docker stop my-container
    ExecStopPost=/usr/bin/docker rm my-container
    
    [Install]
    WantedBy=multi-user.target
    
  • 启用并启动服务:
    sudo systemctl daemon-reload
    sudo systemctl enable my-docker-container.service
    
    之后EC2重启时,systemd会自动按依赖顺序启动Docker和你的容器。

方法二:用EC2用户数据自动执行脚本

适合需要在实例启动时自动完成配置的场景,首次启动或每次重启都生效:

  • 编辑EC2实例的用户数据(创建实例时或控制台修改),添加以下脚本:
    #!/bin/bash
    # 确保Docker服务开机自启并启动
    sudo systemctl enable docker
    sudo systemctl start docker
    
    # 清理旧容器(如果存在)并启动新容器
    CONTAINER_NAME="my-container"
    if docker ps -aq --filter name="$CONTAINER_NAME"; then
        docker stop "$CONTAINER_NAME"
        docker rm "$CONTAINER_NAME"
    fi
    docker run -d --name "$CONTAINER_NAME" [你的镜像名]
    
  • 保存后重启实例,启动过程中会自动执行这段脚本拉起容器。

方法三:Crontab @reboot 任务(简单快捷)

适合需求简单的场景,无需复杂配置:

  • 编辑当前用户的crontab:
    crontab -e
    
  • 添加一行命令,注意如果Docker启动慢,可加延迟避免失败:
    # 直接启动
    @reboot /usr/bin/docker run -d --name my-container [你的镜像名]
    
    # 带30秒延迟(应对Docker启动较慢的情况)
    # @reboot sleep 30 && /usr/bin/docker run -d --name my-container [你的镜像名]
    
  • 缺点是没有依赖管理,若Docker服务未完全启动,容器可能启动失败,也无法自动重启容器。

注意事项

  • 确保EC2实例已安装Docker,且docker命令路径为/usr/bin/docker(可通过which docker确认)。
  • 如果容器需要持久化数据,一定要挂载本地目录或EBS卷,避免重启后数据丢失。
  • 给容器指定固定名称(--name参数),方便后续管理和脚本中的判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:24:37