Skip to content
Cloudflare Docs
非官方翻译 - 此文档为非官方中文翻译版本,仅供参考。如有疑问请以 英文官方文档 为准。

常见问题

常见问题:

容器日志如何工作?

要在控制面板中获取日志,包括日志的实时跟踪,请在您的 Worker 的 wrangler 配置中将 observability 切换为 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 将再次 尝试找到最近的"空闲"容器实例,可能 是北美的一个,并在那里启动实例。

容器更新和推出如何工作?

当您运行 wrangler deploy 时,Worker 代码会立即更新,容器 实例使用滚动部署策略更新。容器实例默认按批次更新,一次更新 25% 的实例。

当容器实例准备停止时,它会收到 SIGTERM 信号,这 允许它优雅地关闭。如果实例在 15 分钟内没有停止, 它会被 SIGKILL 信号强制停止。如果您有必须在 容器实例停止之前发生的清理,您应该在此期间完成。

停止后,实例将被运行更新代码的新实例替换。当 新实例启动时,请求将在容器启动期间挂起。

扩展如何工作?

有关详细信息,请参阅扩展和路由文档

什么是冷启动?它们有多快?

冷启动是指从完全停止状态启动容器实例。

如果您使用全新的 ID 调用 env.MY_CONTAINER.get(id) 并第一次启动 此实例,它将导致冷启动。

这将从其入口点首次启动容器镜像。根据 此入口点的功能,启动将需要可变的时间。

容器冷启动通常在 2-3 秒范围内,但这取决于 镜像大小和代码执行时间等因素。

如何使用现有的容器镜像?

有关详细信息,请参阅镜像管理文档

磁盘是持久的吗?当我的容器进入睡眠状态时,我的磁盘会发生什么?

所有磁盘都是临时的。当容器实例进入睡眠状态时,下次 启动时,它将拥有由其容器镜像定义的全新磁盘。

持久磁盘是 Cloudflare 团队正在探索的未来功能,但 不计划在近期推出。

如果我内存不足会发生什么?

如果您内存不足,您的实例将抛出内存不足 (OOM) 错误并 将重新启动。

容器不使用交换内存。

实例可以运行多长时间?当主机服务器关闭时会发生什么?

Cloudflare 不会在特定时间后主动关闭容器实例。如果您没有在容器类上设置 sleepAfter,或手动停止实例,它将继续运行,除非其主机服务器重新启动。这 发生在不规则的节奏上,但频繁到足以让 Cloudflare 不 保证任何实例将运行任何设定的时间。

当容器实例将要关闭时,它会收到 SIGTERM 信号, 然后在 15 分钟后收到 SIGKILL 信号。您应该执行任何必要的 清理以确保在此时间内优雅关闭。容器实例 将在此后不久在其他地方重新启动。

如何将密钥传递给我的容器?

您可以使用 Worker 密钥密钥存储 为您的 Workers 定义密钥。

然后您可以使用 envVars 属性将这些密钥传递给您的容器:

class MyContainer extends Container {
defaultPort = 5000;
envVars = {
MY_SECRET: this.env.MY_SECRET,
};
}

或者在 Durable Object 上启动容器实例时:

this.ctx.container.start({
env: {
MY_SECRET: this.env.MY_SECRET,
},
});

有关详细信息,请参阅环境变量和密钥示例

如何允许或禁止来自我的容器的出口流量?

启动容器时,您可以指定 enableInternet,这将切换 互联网访问开启或关闭。

要禁用它,请在您的容器类上配置它:

class MyContainer extends Container {
defaultPort = 7000;
enableInternet = false;
}

或者在 Durable Object 上启动容器实例时:

this.ctx.container.start({
enableInternet: false,
});