← Containers / containers
Často kladené dotazy
Jak fungují logy Container?
Pro zobrazení logů v dashboardu, včetně jejich sledování v reálném čase, přepněte observability na true
v konfiguraci wrangler vašeho Workeru:
{
"observability": {
"enabled": true
}
}[observability]
enabled = trueNa protokoly se vztahují stejná limity jako Worker Logs, což znamená, že se uchovávají po dobu 3 dnů u plánu Free a 7 dnů u placených plánů.
Viz Ceny Workers Logs pro podrobnosti o ceně.
Pokud jste uživatelem plánu Enterprise, můžete exportovat protokoly kontejnerů přes Logpush do vámi preferovaného cíle.
Jak se vybírají lokality instancí kontejneru?
Při počátečním nasazení Containeru Cloudflare vybere v naší síti různé lokality, kam instance nasadí. Tyto lokality mohou zahrnovat více regionů.
Když je instance Containeru vyžádána s this.ctx.container.start, vybere se nejbližší volná
instance kontejneru z předinicializovaných lokalit. Ta se
pravděpodobně nachází ve stejném regionu jako externí požadavek, ale nemusí tomu tak být vždy. Jakmile instance kontejneru
běží, všechny budoucí požadavky se směrují do této počáteční lokality.
Příklad:
- Uživatel nasadí Container. Cloudflare automaticky připraví instance v celé své síti.
- Požadavek odešle klient z Bariloche v Argentině. Dorazí na Worker v lokalitě Cloudflare v Neuquenu v Argentině.
- Tento požadavek Workeru volá
MY_CONTAINER.get("session-1337")což aktivuje Durable Object, který následně voláthis.ctx.container.start. - Tím se vyžádá nejbližší volná instance Containeru.
- Cloudflare zjistí, že je v Buenos Aires v Argentině volná instance, a spustí ji tam.
- Jiný uživatel potřebuje směrovat požadavek do stejného kontejneru. Jeho požadavek dorazí na Worker běžící v lokalitě Cloudflare v San Diegu.
- Worker znovu volá
MY_CONTAINER.get("session-1337"). - Pokud stále běží počáteční instance kontejneru, požadavek se přesměruje do umístění v Buenos Aires. Jakmile počáteční kontejner usne, Cloudflare se znovu pokusí najít nejbližší „volnou“ instanci kontejneru, pravděpodobně v Severní Americe, a spustí instanci tam.
Jak fungují aktualizace a rollouty kontejnerů?
Na wrangler deploy, Worker se nasadí jako první. Instance kontejneru se ve výchozím nastavení aktualizují formou postupného rolloutu. Další informace najdete v Rollouty pro kroky, ochranné lhůty a režimy. Podívejte se na Nasaďte Containers ke spuštění nasazení.
Jak fungují Workers Builds s Containers?
Na produkční větvi by se Workers Builds měl spouštět wrangler deploy aby bylo možné aktualizovat obrazy a instance kontejnerů. Neprodukční Workers Builds standardně používá wrangler versions upload, který obrazy neaktualizuje. Containers Workers implementují Durable Objects, takže se pro ně negenerují náhledové adresy URL. Více informací najdete v Nasaďte Containers.
Jak funguje škálování?
Containers škálují vytvářením nebo oslovováním konkrétních instancí. Pro bezstavové směrování mezi
pevným počtem zaměnitelných instancí použijte getRandom pomocnou funkci.
Viz škálování a směrování s podrobnostmi.
Je k dispozici vestavěné automatické škálování pro bezstavové aplikace?
Zatím ne, Cloudflare ale plánuje v budoucí verzi přidat vestavěné automatické škálování.
Do té doby použijte getRandom pro jednoduché bezstavové směrování a konkrétní ID instancí, pokud potřebujete explicitní kontrolu nad životním cyklem kontejneru.
Co jsou studené starty? Jak rychlé jsou?
Studený start nastává, když se instance kontejneru spouští z úplně zastaveného stavu.
Pokud zavoláte env.MY_CONTAINER.get(id) s zcela novým ID a tuto instanci
spustíte poprvé, dojde ke cold startu.
Tím se poprvé spustí obraz kontejneru z jeho entrypointu. V závislosti na tom, co tento entrypoint dělá, bude spuštění trvat různě dlouho.
Studené starty kontejneru se často pohybují v rozmezí 1 až 3 sekund, což ale závisí na velikosti obrazu a době běhu kódu i na dalších faktorech.
Jak použiji existující obraz kontejneru?
Viz správa image.
Je disk trvalý? Co se stane s diskem, když se kontejner uspí?
Veškerý disk je dočasný. Když instance Container přejde do režimu spánku, při dalším spuštění bude mít nový disk podle definice v image kontejneru.
Snapshoty budou brzy k dispozici. Umožní uživatelům rychle uložit a obnovit disk celého kontejneru nebo adresáře.
Můžete také použít FUSE k trvalému uložení disku na R2 nebo jiná úložiště typu object storage. Nečekejte však při použití FUSE nativní výkon podobný SSD.
Co se stane, když dojde paměť?
Pokud dojde paměť, instance vyvolá chybu Out of Memory (OOM) a bude restartována.
Containers nepoužívají swapovou paměť.
Jak dlouho mohou instance běžet? Co se stane, když se vypne hostitelský server?
Cloudflare nezastavuje instanci kontejneru po pevně dané maximální době běhu. Třída Container nastavuje sleepAfter na výchozích 10 minut a jeho výchozí onActivityExpired() implementace signalizuje kontejneru, aby se po tomto období nečinnosti zastavil. Délku tohoto období můžete změnit nebo hook přepsat vlastní implementací. I když váš hook nechá instanci běžet dál, může ji zastavit jiná platformní událost. Jednou z nich je restart hostitelského serveru, ke kterému dochází v nepravidelných intervalech. Cloudflare nezaručuje, že libovolná instance kontejneru poběží po jakkoli dlouhou stanovenou dobu.
Předtím, než platforma zastaví instanci kontejneru (včetně situace, kdy hostitel přesouvá úlohy ze serveru), provede následující:
- Odešle
SIGTERMhlavnímu procesu v kontejneru. - Čeká až 15 minut, než se tento proces ukončí.
- Odešle
SIGKILLpokud proces stále běží.
Zpracování SIGTERM ve vašem image, pokud před ukončením potřebujete provést úklid. Po zastavení hostitele může nová instance kontejneru naběhnout na jiném serveru, jakmile ji znovu vyžádá provoz.
Aktualizace obrazů během nasazení používají stejnou sekvenci zastavení. Podrobnosti najdete v Rollouty.
Jak mohu předat secrets svému kontejneru?
Můžete použít Worker Secrets nebo Secrets Store pro definování secrets pro vaše Workers.
Podrobnosti implementace najdete v Proměnné prostředí a secrets.
Mohu spustit Docker uvnitř kontejneru (Docker-in-Docker)?
Ano. Použijte docker:dind-rootless základní obraz, protože Containers běží bez oprávnění roota.
Při spouštění Docker daemonu musíte vypnout iptables, protože Containers nepodporují úpravy iptables:
FROM docker:dind-rootless
# Start dockerd with iptables disabled, then run your app
ENTRYPOINT ["sh", "-c", "dockerd-entrypoint.sh dockerd --iptables=false --ip6tables=false & exec /path/to/your-app"]Pokud vaše aplikace potřebuje před použitím Dockeru počkat, až bude dockerd připraven, použijte místo výše uvedeného vloženého příkazu skript entrypoint:
#!/bin/sh
set -eu
# Wait for dockerd to be ready
until docker version >/dev/null 2>&1; do
sleep 0.2
done
exec /path/to/your-appKompletní funkční příklad najdete v Příklad Docker-in-Docker kontejnerů ↗.
Jak povolím nebo zakážu odchozí provoz z kontejneru?
Viz Zpracování odchozího provozu pro informace o tom, jak řídit odchozí provoz a přístup k internetu.