首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Cloudflare Containers 避坑指南

Cloudflare Containers 避坑指南

作者头像
扶墙老师
发布2025-06-26 09:59:58
发布2025-06-26 09:59:58
27600
代码可运行
举报
文章被收录于专栏:扶墙集扶墙集
运行总次数:0
代码可运行

今天Cloudflare发布了他们自己的Containers方案,

我也做了个原理性的介绍视频发到了 「架构百科」 (https://jiagoubaike.com/) 视频号与 油管频道 (https://youtu.be/M9-MeskfF-o) : 「六分钟极速通关Cloudflare Containers

建议读到这篇文字的同学可以先去看视频

看完视频之后再回来看文字

因为文字只对玩Cloudflare Containers过程中常见的坑儿进行了记录和分享…

Docker需预装

如果你使用的是macos系统,建议安装OrbStack, 虽然Docker Desktop也没问题。

总之先要有个本地的Docker编译环境, 因为wrangler deploy的时候会调用docker来编译docker image,本地如果找不到docker支持,那么会报错:

代码语言:javascript
代码运行次数:0
运行
复制
(base)LuckyJohn💫 ➜  hello-cf-container git:(master)✗ wr deploy

⛅️ wrangler 4.21.2
───────────────────
Total Upload: 81.93 KiB / gzip: 20.23 KiB
Your Worker has access to the following bindings:
Binding                                     Resource
env.KEEWEB_CONTAINER(KeeWebContainer)Durable Object

Uploaded hello-cf-container (7.05 sec)
Building image hello-containers-with-java-scala:9bab1ce2
[+] Building 1.7s (3/3)FINISHED                                                                                                                                                                                      docker:orbstack
=>[internal] load build definition from Dockerfile                                                                                                                                                                             0.0s
=> => transferring dockerfile: 175B                                                                                                                                                                                             0.0s
=> ERROR [internal] load metadata for docker.io/library/eclipse-temurin:24-jre                                                                                                                                                  1.6s
=>[auth] library/eclipse-temurin:pull token for registry-1.docker.io                                                                                                                                                           0.0s
------
>[internal] load metadata for docker.io/library/eclipse-temurin:24-jre:
------
Dockerfile:1
--------------------
|>>> FROM eclipse-temurin:24-jre
|ADD container-java.jar /hello-cf-container.jar
|EXPOSE
--------------------
ERROR: failed to solve: failed to fetch oauth token: Post "https://auth.docker.io/token": read tcp 192.168.199.247:54738->44.208.254.194:443: read: connection reset by peer

✘[ERROR] Build exited with code: 1

网络需畅通

就算装了Docker, 有个东西也要注意,那就是网络。

假如你有登天梯,那么,最好开TUN模式,否则,很可能碰到类似的错误:

代码语言:javascript
代码运行次数:0
运行
复制
Image does not exist remotely, pushing: registry.cloudflare.com/9b787d029c7992a6dd38a4c749403228/hello-containers-with-java-scala:e62c63b6
The push refers to repository [registry.cloudflare.com/9b787d029c7992a6dd38a4c749403228/hello-containers-with-java-scala]
5dc0fe8b0741: Layer already exists
...
Head"https://registry.cloudflare.com/v2/9b787d029c7992a6dd38a4c749403228/hello-containers-with-java-scala/blobs/sha256:af0ca98f33ef433a4b7855291e197fc872145873dd41c9e3ec6396517ac80202": net/http: TLS handshake timeout

✘[ERROR] Docker command exited with code: 1

Wrangler版本不能太老

这个坑耗费我时间最久,因为命令行打印信息和滚动速度比较快,最开始我没注意前面的错误信息,导致我认为部署成功了。(而且,信息也确实提示部署成功了,艹!)

所以, 我咋刷新也看不到“部署成功”的containers, 访问理论上应该可以访问成功的路径也不成功(超时或者报错)。

兜了很大一圈子(甚至都去折腾java项目的依赖冲突去了), 偶然才发现,原来是因为我用的全局wrangler版本过低!!!

因为我给全局wrangler设置了一个wr的alias方便使用,所以并没有用项目定义里的wrangler。

最后ni -g wrangler@4(即npm install -g wrangler@4)升级后搞定。 (当然,还顺道调换了下node在$PATH环境变量中的位置)

另外就是,假如之前本地的wrangler处于登陆了cloudflare的状态,那么,因为cloudflare containers这个特性太新, 所以,会提示有的权限不够,需要重新登录。

代码语言:javascript
代码运行次数:0
运行
复制
Uploaded hello-cf-container (3.39 sec)
✘[ERROR] You don't have 'containers:write' in your list of scopes
...
✘ [ERROR] You need 'containers:write', try logging in again or creating an appropiate API token

这时候就是两步走:

  1. wrangler logout (我是wr logout)
  2. wrangler login(我是wr login

之后运行wrangler deploy或者npx wrangler deploy就可以成功部署了。

containerFetch地址要特殊对待

我在前面的视频里有个点说错了,因为最后验证成功之前录的那个视频,所以有一个点说错了(而且视频里还强调了),

那就是, containerFetch的参数在sample代码里演示的样式是没问题的,是我错读了js代码里的comment:

const response = await containerInstance.containerFetch("https://container/");

https://container/其实就是最BASE的请求URL, 然后再附加请求路径信息,比如:

  • https://container/homepage
  • https://container/list
  • https://container/detail

直接请求路径会报错,比如下面的形式:

  • /
  • /homepage
  • /list
  • /detail

所以,这里对于视频中的错误做一个纠正, sorry to bother you 😂

Container定义要export

代码语言:javascript
代码运行次数:0
运行
复制
exportclassKeeWebContainerextendsContainer {
// Configure default port for the container
defaultPort = 1979;
sleepAfter = "1m";
}

Container的封装定义类要export,否则,配置中访问不到。

scaffolding sucks

cloudflare官方文档给的快速本地常见项目的scaffolding命令不好用(也可能是我本地node环境的问题), 用了hono的scaffolding也没成功,可能你不一定会遇到:

  • npm create cloudflare@latest -- --template=cloudflare/templates/containers-template
  • npm create hono@latest worker_project

这个倒是问题不大,因为我之前写了很多cloudflare workers项目,所以直接copy一个改一改,增加containers相关的配置就可以了。

最后,我用Scala写了个程序打包成container,部署成功之后,运行效果如下:

图片
图片

用的Dockerfile也贴下供参考(偷懒,直接把Scala项目的onejar拿过来打包的):

代码语言:javascript
代码运行次数:0
运行
复制
FROM eclipse-temurin:24-jre
ADD container-java.jar /hello-cf-container.jar
EXPOSE
CMD [ "java", "-jar", "/hello-cf-container.jar"]

Last but not least

因为还是beta阶段,所以,大家在玩的时候难免会遇到这样那样的问题,都算正常。

分享以上坑获 [1], 希望大家可以省去去这些踩坑的时间,毕竟,时间就是生命 🤪

补充注释


[1] 我去,双关了,哈哈哈, 这里也有一些 《坑获》 (https://afoo.me/books.html)

题图创作工具与提示

主题     ⇒  Gun Girl

AI模型   ⇒ Flux Pro 1.1

Prompt ⇓⇓⇓

```

You're a Mix Funny character genius.

from this example

A minion from despicable me, red skin, Darth Maul like spikes on head, dressed in a dark Sith lord robe, Dark Jedi, angry expression, scowling, (looking at viewer, holding a red lightsaber, pitch black background only illuminated by red lightsaber, perfect lightsaber, lightsaber pointed at viewer, Highest quality, masterpiece, 4k, concept art,

make another one with ‘young girl with gun, horns on head’ as 吉卜力风格

don't forget to add ‘young girl with gun, horns on head’ and Features of 吉卜力风格, expression, looking at viewer, background, Highest quality, masterpiece, 4k, concept art,

```

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福强 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker需预装
  • 网络需畅通
  • Wrangler版本不能太老
  • containerFetch地址要特殊对待
  • Container定义要export
  • scaffolding sucks
  • Last but not least
  • 补充注释
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档