要在仪表板中获取日志(包括实时尾随日志),请在您的 Worker 的 wrangler 配置中将 observability 切换为 true:
{
"observability": {
"enabled": true
}
}[observability]
enabled = true日志受与 Worker 日志相同的限制 的约束,这意味着在免费计划中它们将保留 3 天,在付费计划中将保留 7 天。
有关成本的详细信息,请参阅 Workers 日志定价。
如果您是企业用户,则可以通过 Logpush 将容器日志导出到您的首选目的地。
首次部署容器时,Cloudflare 将在我们的网络中选择多个位置来部署实例。这些位置将跨越多个区域。
当使用 this.ctx.container.start 请求容器实例时,将从预初始化的位置中选择最近的空闲容器实例。这很可能与外部请求在同一区域,但也可能不是。一旦容器实例运行,任何未来的请求都将被路由到初始位置。
示例:
- 用户部署了一个容器。Cloudflare 会在其网络中自动准备好实例。
- 来自阿根廷巴里洛切的客户端发出请求。它到达了位于阿根廷内乌肯的 Cloudflare 位置的 Worker。
- 此 Worker 请求调用
MY_CONTAINER.get("session-1337"),从而启动 Durable Object,然后调用this.ctx.container.start。 - 这将请求最近的空闲容器实例。
- Cloudflare 识别到阿根廷布宜诺斯艾利斯有一个空闲实例,并在那里启动它。
- 不同的用户需要路由到同一个容器。该用户的请求到达了运行在圣地亚哥的 Cloudflare 位置的 Worker。
- Worker 再次调用
MY_CONTAINER.get("session-1337")。 - 如果初始容器实例仍在运行,请求将被路由到布宜诺斯艾利斯的位置。如果初始容器已进入休眠状态,Cloudflare 将再次尝试查找最近的容器“空闲”实例,可能在北美,并在那里启动实例。
有关详细信息,请参阅推出文档。
容器通过创建或寻址特定实例来进行扩展。要跨固定数量的可互换实例进行无状态路由,请使用 getRandom 辅助程序。
有关详细信息,请参阅扩展和路由。
目前尚未提供,但 Cloudflare 计划在未来的版本中添加内置自动扩展。
在此之前,对于简单的无状态路由请使用 getRandom,在需要显式控制容器生命周期时请使用特定实例 ID。
冷启动是指从完全停止的状态启动容器实例。
如果您使用全新的 ID 调用 env.MY_CONTAINER.get(id) 并首次启动此实例,则会导致冷启动。
这将首次从其入口点启动容器镜像。根据该入口点执行的操作,启动需要的时间会有所不同。
容器冷启动通常在 1-3 秒的范围内,但这取决于镜像大小和代码执行时间等其他因素。
有关详细信息,请参阅镜像管理文档。
所有磁盘都是临时的。当容器实例进入休眠状态时,下次启动它时,它将拥有由其容器镜像定义的全新磁盘。
快照即将推出,它允许用户快速持久化并从整个容器或目录中恢复磁盘。
您还可以使用 FUSE 将磁盘持久化到 R2 或其他对象存储后端。但是,您不应期望在使用 FUSE 时获得原生类 SSD 的性能。
如果内存不足,您的实例将引发内存不足 (OOM) 错误并将重新启动。
容器不使用交换内存。
Cloudflare 不会在特定时间后主动关闭容器实例。如果您未在容器类上设置 sleepAfter 或手动停止实例,它将继续运行,除非其主机服务器重新启动。这种情况的发生频率是不固定的,但足够频繁,因此 Cloudflare 不保证任何实例会在任何设定的时间段内运行。
当容器实例即将关闭时,它会被发送一个 SIGTERM 信号,然后在 15 分钟后发送一个 SIGKILL 信号。您应在此期间执行任何必要的清理工作以确保优雅关闭。此后不久,容器实例将在其他位置重新启动。
您可以使用 Worker Secrets 或 Secrets Store 为您的 Workers 定义机密。
有关实现详细信息,请参阅环境变量和机密。
可以。使用 docker:dind-rootless 基础镜像,因为容器运行时没有 root 权限。
启动 Docker 守护进程时,必须禁用 iptables,因为容器不支持 iptables 操作:
FROM docker:dind-rootless
# 启动停用了 iptables 的 dockerd,然后运行您的应用程序
ENTRYPOINT ["sh", "-c", "dockerd-entrypoint.sh dockerd --iptables=false --ip6tables=false & exec /path/to/your-app"]如果您的应用程序在使用 Docker 之前需要等待 dockerd 就绪,请使用入口点脚本而不是上面的内联命令:
#!/bin/sh
set -eu
# 等待 dockerd 就绪
until docker version >/dev/null 2>&1; do
sleep 0.2
done
exec /path/to/your-app有关完整的工作示例,请参阅 Docker-in-Docker 容器示例 ↗。
有关如何控制出站流量和互联网访问,请参阅处理出站流量。