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

如何在Google Cloud Run中启动Docker守护进程以运行docker-compose?

在Google Cloud Run中运行Docker相关服务的解决方案

首先明确:Cloud Run的运行环境是受限的容器环境,默认不支持直接启动Docker守护进程(dockerd),这是因为它没有完整挂载cgroup子系统,也不允许特权容器模式,所以你遇到的Devices cgroup isn't mounted错误是环境限制导致的。

以下是两种可行的替代方案,适配Cloud Run的架构:

方案一:使用Cloud Run多容器部署(推荐)

Cloud Run支持在单个服务中运行多个容器,这些容器共享同一个网络命名空间(可通过localhost互相通信),完全可以替代你原来的docker-compose架构:

  • 将docker-compose中的每个服务(Flask应用、其他依赖服务)分别打包成独立的Docker镜像,推送到Google Container Registry(GCR)或Artifact Registry
  • 创建Cloud Run服务时,配置多容器:
    • 每个容器对应一个原服务,设置好各自的镜像地址
    • 若需要对外暴露端口,只需在主容器(或需要对外提供服务的容器)中配置端口映射
  • 容器间通信直接使用localhost:端口,和你在Compute Engine上的方式一致

示例Cloud Run多容器配置片段(yaml):

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: my-multi-container-service
spec:
  template:
    spec:
      containers:
      - name: flask-app
        image: us-docker.pkg.dev/my-project/my-repo/flask-app:latest
        ports:
        - containerPort: 5000
      - name: dependent-service
        image: us-docker.pkg.dev/my-project/my-repo/dependent-service:latest
        ports:
        - containerPort: 8080

方案二:使用Sysbox运行Docker-in-Container(仅适用于必须动态启动容器的场景)

如果你的业务逻辑必须在容器内动态启动Docker容器,可以使用Sysbox-runc替代默认的runc,它不需要特权模式即可运行Docker,且能绕过cgroup限制:

  1. 基于Ubuntu 22.04构建自定义镜像,安装Docker和Sysbox:
    FROM ubuntu:22.04
    
    # 安装依赖
    RUN apt-get update && apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
    
    # 安装Docker
    RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
    RUN apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io
    
    # 安装Sysbox
    RUN curl -fsSL https://download.nestybox.com/sysbox/releases/v0.6.4/sysbox-debs/v0.6.4.tar.gz | tar -C /tmp -xz
    RUN dpkg -i /tmp/sysbox-debs/*.deb
    
    # 配置Docker使用Sysbox runtime
    RUN echo '{ "runtimes": { "sysbox-runc": { "path": "/usr/bin/sysbox-runc" } } }' > /etc/docker/daemon.json
    
  2. 启动Docker守护进程时指定sysbox runtime:
    dockerd --add-runtime sysbox-runc=/usr/bin/sysbox-runc &
    
  3. 在Cloud Run中部署该镜像时,需注意资源配额限制,Cloud Run底层运行时已兼容Sysbox。

重要提醒

Cloud Run是无状态的无服务器平台,设计用于处理短期、无状态的请求。如果你的业务需要长期运行的容器或复杂的容器编排,建议考虑使用Google Kubernetes Engine(GKE),它更适合这类场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:34:55