← Containers / containers
Lokální vývoj
Kontejner i Worker můžete spustit lokálně současně jednoduše spuštěním npx wrangler dev (nebo vite dev pro projekty Vite používající Cloudflare Vite plugin) ve složce vašeho projektu.
Pro lokální vývoj Workerů s podporou Containers musíte nejprve zajistit, že máte nainstalovaný nástroj CLI kompatibilní s Dockerem a Engine. Můžete například použít Docker Desktop ↗ nebo Colima ↗.
Při spuštění vývojářské relace se image kontejneru sestaví nebo stáhne. Pokud váš
Konfigurace Wrangleru nastavuje
proměnnou image atribut na místní cestu, obraz se sestaví z místního Dockerfile.
Pokud je image atribut je nastaven na odkaz na obraz, obraz se stáhne z odkazovaného registru, jako je Cloudflare Registry, Docker Hub, Amazon ECR nebo Google Artifact Registry.
Instance kontejneru se spustí lokálně ve chvíli, kdy kód vašeho Workeru zavolá vytvoření nového kontejneru. Požadavky se pak automaticky nasměrují na správný lokálně běžící kontejner.
Po ukončení vývojářské relace by se měly zastavit všechny přidružené instance kontejneru, lokální image se ale neodstraňují, aby je bylo možné znovu použít při dalších sestaveních.
Podpora FUSE
Miniflare automaticky uděluje lokálním kontejnerům oprávnění Docker potřebná pro Filesystem in Userspace (FUSE). Platí to pro wrangler dev, plugin Cloudflare Vite a přímé použití Miniflare.
Miniflare uděluje tato oprávnění, když lokální Docker daemon běží uvnitř virtuálního stroje (VM). To zahrnuje Docker engine na macOS a přes Windows Subsystem for Linux (WSL). Na Linuxu Miniflare uděluje oprávnění pro lokální rootless Docker, když /dev/fuse je k dispozici.
Rootful Docker na Linuxu ve výchozím nastavení při lokálním vývoji nepodporuje FUSE. Miniflare neuděluje oprávnění FUSE, pokud démon Dockeru tyto podmínky nesplňuje nebo jej nelze zkontrolovat.
Iterativní vývoj kódu Container
Pokud vyvíjíte pomocí Wrangleru nebo Vite, kód vašeho Workeru se při každém uložení změny automaticky znovu načte, kód běžící uvnitř kontejneru se ale nenačítá znovu.
Pro opětovné sestavení kontejneru s novými změnami kódu můžete kliknout na [r] na klávesnici, což
spustí nové sestavení. Instance Container se pak restartují s nově sestavenými images.
Můžete si raději nastavit vlastní sledování změn kódu a mechanismy pro jeho opětovné načítání, případně připojit lokální adresář do lokálních image kontejneru a synchronizovat tak změny kódu. To je možné, žádný vestavěný mechanismus pro to ale neexistuje a doporučené postupy budou záviset na jazycích a frameworcích, které ve svém kódu kontejneru používáte.
Řešení potíží
Zpřístupnění portů
V produkčním prostředí budou všechny porty vašeho kontejneru přístupné z Workeru, takže je není nutné výslovně otevírat pomocí EXPOSE instrukce ↗ ve vašem Dockerfile.
Pro lokální vývoj ale musíte v Dockerfile deklarovat všechny porty, ke kterým potřebujete přistupovat, pomocí instrukce EXPOSE, například: EXPOSE 4000, pokud budete přistupovat na port 4000.
Pokud jste neotevřeli žádné porty, zobrazí se vám při lokálním vývoji následující chyba:
The container "MyContainer" does not expose any ports. In your Dockerfile, please expose any ports you intend to connect to.A pokud se pokusíte připojit k libovolnému portu, který jste nezpřístupnili ve svém Dockerfile se vám zobrazí následující chyba:
connect(): Connection refused: container port not found. Make sure you exposed the port in your container definition.Totéž se může objevit i tehdy, když se kontejner teprve spouští a porty ještě nejsou dostupné. Opakujte pokus, dokud porty nebudou k dispozici. Tuto logiku opakování byste měli mít vyřešenou automaticky, pokud používáte balíček containers ↗.
Konfigurace socketu: internal error
Pokud se zobrazí nesrozumitelná internal error při pokusu o připojení ke kontejneru budete možná muset nastavit DOCKER_HOST proměnnou prostředí na cestu k socketu, na kterém naslouchá váš kontejnerový engine. Wrangler nebo Vite se pokusí automaticky najít správný socket pro komunikaci s vaším kontejnerovým enginem, ale pokud se to nepodaří, budete možná muset tuto proměnnou prostředí nastavit na odpovídající cestu k socketu.
Chyby SSL s Cloudflare One Client nebo VPN
Pokud používáte Cloudflare One Client nebo VPN, která provádí kontrolu TLS, mohou HTTPS požadavky během sestavování v Dockeru selhat s chybami SSL nebo certifikátu. Děje se to proto, že VPN zachytává provoz HTTPS a znovu jej podepisuje vlastní certifikační autoritou, které Docker ve výchozím nastavení nedůvěřuje.
Řešením je jedna z těchto možností:
-
Vypněte Cloudflare One Client nebo VPN po dobu spouštění
wrangler devnebowrangler deploy, a poté jej znovu povolit. -
Přidejte certifikát do kontextu sestavení Docker. Cloudflare One Client zpřístupňuje svůj certifikát přes
NODE_EXTRA_CA_CERTSaSSL_CERT_FILEproměnné prostředí na hostitelském počítači. Certifikát můžete do sestavení Dockeru předat jako proměnnou prostředí, aby byl dostupný během sestavení, aniž by byl natvrdo zapečený ve výsledném obrazu.RUN if [ -n "$SSL_CERT_FILE" ]; then \ cp "$SSL_CERT_FILE" /usr/local/share/ca-certificates/Custom_CA.crt && \ update-ca-certificates; \ fiWrangler automaticky spustí Docker při spuštění
wrangler devnebowrangler deploy, takže pokud potřebujete předat sestavovací tajné klíče, budete muset obraz sestavit a nahrát ručně pomocíwrangler containers push.