跳转到内容
搜索文档

更新日志

Cloudflare 的最新更新与改进。

在 Containers 中使用 Google Artifact Registry 镜像

Containers 现在支持 Google Artifact Registry 镜像。配置凭据后,您可以在 Wrangler 配置中使用完全限定的 Google Artifact Registry 镜像引用,而无需先将镜像推送到 Cloudflare Registry。

使用 --gar-email 提供服务账户电子邮件,并通过 stdin 用管道传输服务账户 JSON 密钥:

cat <PATH_TO_KEY> | npx wrangler containers registries configure <REGION>-docker.pkg.dev --gar-email=<SERVICE_ACCOUNT_EMAIL> --secret-name=<SECRET_NAME>
{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "containers": [
    {
      "image": "<REGION>-docker.pkg.dev/<PROJECT_ID>/<REPOSITORY>/<IMAGE>:<TAG>"
    }
  ]
}
# 示例: us-central1-docker.pkg.dev/my-project/my-repo/my-image:latest
[[containers]]
image = "<REGION>-docker.pkg.dev/<PROJECT_ID>/<REPOSITORY>/<IMAGE>:<TAG>"

仅支持 *-docker.pkg.dev 主机。要配置凭据,请参阅使用私有 Google Artifact Registry 镜像

欲了解更多信息,请参阅镜像管理

Containers 现已支持 exec()

exec() 现已用于 Containers。使用 this.ctx.container.exec() 在正在运行的 Container 中启动进程、流式传输标准输入和输出、检查退出状态码以及向每个进程发送信号。

在继承 Container 的类中,或在另一个 Durable Object 中通过 this.ctx.container 调用 exec()。关联的 Container 必须已在运行。

此示例在需要时启动 Container,然后读取其 Node.js 版本:

src/index.jsjs
import { Container } from "@cloudflare/containers";

export class MyContainer extends Container {
	async readVersion() {
		if (!this.ctx.container.running) {
			await this.start();
		}

		const process = await this.ctx.container.exec(["node", "--version"]);
		const output = await process.output();
		const decoder = new TextDecoder();

		return {
			exitCode: output.exitCode,
			stdout: decoder.decode(output.stdout),
			stderr: decoder.decode(output.stderr),
		};
	}
}
src/index.tsts
import { Container } from "@cloudflare/containers";

export class MyContainer extends Container {
	async readVersion() {
		if (!this.ctx.container.running) {
			await this.start();
		}

		const process = await this.ctx.container.exec(["node", "--version"]);
		const output = await process.output();
		const decoder = new TextDecoder();

		return {
			exitCode: output.exitCode,
			stdout: decoder.decode(output.stdout),
			stderr: decoder.decode(output.stderr),
		};
	}
}

命令数组直接启动可执行文件,没有隐式的 shell。如果需要管道、重定向或变量展开,请显式调用 shell。

一个 RPC 方法可以在一次调用者到 Durable Object 的往返中协调多个 exec() 调用。它还可以传递面向字节的 ReadableStream 输入或返回具有流量控制的流式输出。

有关选项和流式传输示例,请参阅执行命令

计费使用量和预算警报现已集成到产品侧边栏中

按需付费(Pay-as-you-go)客户现在可以直接从 Workers & PagesD1R2Workers KVQueuesVectorizeDurable ObjectsContainers 的产品概览页面查看计费使用量并创建预算警报。新的侧边栏小组件显示了当前时期的支出和账单周期日期范围,同时还提供了一个用于创建预算警报的按钮。

该小组件提取与计费使用量仪表板相同的数据,并与您的账单周期(或免费计划中的当前日期)保持一致,因此数据与您的发票相符。目前尚不支持 Enterprise 合约账户。

Durable Objects 产品侧边栏中的计费使用量小组件,显示当前时期的支出和按服务细分的明细

选择 **Create budget alert(创建预算警报)**会以内联方式打开预算警报流程,以便您在查看使用量的同一位置设置美元阈值。预算警报适用于您在所有产品上的账户级别总支出,而不仅仅是您创建该警报的产品页面。

有关更多信息,请参阅基于使用量的计费文档

Wrangler 支持用于 Containers 的 SSH ProxyCommand

Wrangler 支持将 wrangler containers ssh 作为 OpenSSH ProxyCommand 用于 Containers。这允许您的本地 SSH 客户端通过 Wrangler 连接到正在运行的 Container。

ssh -o ProxyCommand="wrangler containers ssh %h" cloudchamber@<INSTANCE_ID>

当标准输入和输出被管道传输时,Wrangler 会将数据转发到 Container 中的 SSH 服务器。您也可以传递 --stdio 来强制使用此模式。

欲了解更多信息,请参阅 SSH 文档

通过 Wrangler 进行 SSH 连接现已为容器默认启用

通过 Wrangler 进行 SSH 连接现已为容器默认启用。此前,您必须在容器配置中将 ssh.enabled 设置为 true 才能连接。

此更改不会在您的容器上暴露任何公开可访问的端口。SSH 服务仅可通过 wrangler containers ssh 访问,该命令会对您的 Cloudflare 账户进行身份验证。您还需要在 authorized_keys 中添加 ssh-ed25519 公钥才能连接,因此仅启用 SSH 并不能授予访问权限。

要连接,请在容器配置中添加公钥并运行 wrangler containers ssh <INSTANCE_ID>

{
	"containers": [
		{
			"authorized_keys": [
				{
					"name": "<NAME>",
					"public_key": "<YOUR_PUBLIC_KEY_HERE>",
				},
			],
		},
	],
}
[[containers]]
[[containers.authorized_keys]]
name = "<NAME>"
public_key = "<YOUR_PUBLIC_KEY_HERE>"

要禁用 SSH,请在容器配置中将 ssh.enabled 设置为 false

{
	"containers": [
		{
			"ssh": {
				"enabled": false,
			},
		},
	],
}
[[containers]]
[containers.ssh]
enabled = false

如需更多信息,请参阅 SSH 文档