# PHP paikamine Dockeri konteinerites

> PHP Dockeri tõmmise uuendus PHP2Shelli vastu: kontrollige versiooni konteineris, ehitage tõmmis uuesti, looge konteinerid uuesti ja seadke ajutised väärtused.

Allikas: https://phpsos.de/et/php2shell/docker-container-patchen/  
Seis: 25.10.2026  
Pakkuja: PHP SOS, PHP hädaabi ja serveri turvalisus. Kohene abi WhatsAppis: https://wa.me/491736494914?text=Tere%2C%20PHP%20SOS%2C%20vajame%20abi%20oma%20PHP-serveriga.%20Ettev%C3%B5te%3A%20%E2%80%A6%20Veebisait%3A%20%E2%80%A6

**Lühidalt:** PHP Dockeri tõmmise uuendus on PHP2Shelli vastu kohustuslik ja see ei toimu iseenesest. Peate tõmmise parandatud PHP versiooniga uuesti ehitama või tõmbama, iga konteineri sellest uuesti looma ja kontrollima, et töötavas konteineris töötab 8.5.12, 8.4.27, 8.3.36 või 8.2.35. Konteineri lihtne taaskäivitus ei piisa.

## Miks konteinerid ei ole automaatselt turvalised

Dockeri tõmmis on külmutatud hetktõmmis. PHP selles jääb seisu, mis sellel ehitamisel oli, ka siis, kui hostis on uuendused ammu paigaldatud. Paketiuuendus hostsüsteemis ei muuda konteineris olevat PHP-d.

Lisaks tulevad tüüpilised komistuskivid: mitu kuud tagasi ehitatud ja sestsaadik puutumata tõmmised, baastõmmised kindla sildiga nagu `php:8.3.35-fpm`, kohalikud vahemälud, mis ehitamisel taaskasutavad vana baastõmmist, ja konteinerid, mis on küll uuesti käivitatud, kuid mitte kunagi uuesti loodud. Mõjutatud on kõik konteinerites tavalised töörežiimid: PHP-FPM, Apache koos mod_php-ga ja FrankenPHP.

Lisaks tuleb vastutuse küsimus. Paljudes ettevõtetes on agentuur või arendaja tõmmise ühe korra ehitanud, kuid seda käitab sisemine IT või veebimajutaja. Siis ei tunne keegi end vastutavana tõmmise PHP seisu eest. Selgitage seetõttu kõigepealt, kes tõmmist ehitab, kus Dockerfile asub ja kes tohib uusi tõmmiseid juurutada.

## PHP versiooni kontroll konteineris

Kontrollige töötavat konteinerit, mitte ainult Dockerfile'i. Käsud on puhtalt lugevad.

```bash
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.CreatedAt}}"
docker exec <container> php -v
docker exec <container> php -i | grep -E "^PHP Version|Server API"
docker image inspect <image> --format "{{.Created}}"
```

Kui tõmmis kasutab ametlike PHP ehituste asemel distributsiooni pakette, kontrollige paketi seisu konteineris. Paketinimed erinevad baasdistributsiooni kaupa:

```bash
docker exec <container> sh -c "apt policy php8.3-fpm 2>/dev/null || apk info -v 2>/dev/null | grep php"
```

Distributsiooni pakettide puhul võib tagasiportimine olla paigaldatud, kuigi versiooninumber jääb vanaks. Siis loeb paketi muudatuslogi. Ametlikud PHP tõmmised toovad PHP-d seevastu enamasti ise kompileerituna kaasa; seal on käsu `php -v` versiooninumber määrav väärtus. Kuidas tagasiportimisi ära tunda, kirjeldab [PHP versiooni ja paigatud seisu õige kontroll](https://phpsos.de/et/php2shell/php-version-pruefen/).

## PHP Dockeri tõmmise uuendus: uuesti ehitamine ja juurutamine

**Oma tõmmis PHP tõmmise baasil:** tõmmake baastõmmis uuesti ja ehitage ilma vahemäluta.

```bash
docker build --pull --no-cache -t meine-app:2026-10-25 .
docker run --rm meine-app:2026-10-25 php -v      # kontrollige versiooni enne juurutamist
```

**Docker Compose'iga:** tõmmake või ehitage tõmmised ja looge konteinerid uuesti.

```bash
docker compose pull
docker compose build --pull --no-cache
docker compose up -d --force-recreate
```

Kontrollige seejärel uuesti käsuga `docker exec <container> php -v`, kas uus versioon töötab. Kui konteineril on Dockerfile'is kindel versioonisilt, näiteks `FROM php:8.3.35-fpm`, peate silti tõstma. Haru silt nagu `php:8.3-fpm` saab uusi paigatud seise, kuid ainult siis, kui tõmbate uuesti.

Hoidke eelmine tõmmis valmis, kuni uus versioon on testitud. Vea korral saate nii tagasi vahetada, ilma et rakendus kaua võrgust väljas oleks. Vana tõmmis sisaldab aga jälle haavatavat PHP-d; tagasitee on seetõttu õigustatud vaid lühiajaliselt ja ajutiste meetmetega.

Kes kasutab Kubernetes'it, juurutab uue tõmmise juurutuse (Deployment) kaudu. Üksikasjad lehel [PHP paikamine Kubernetes'es](https://phpsos.de/et/server/kubernetes/). FrankenPHP tõmmiste puhul kehtib sama tegevus; märkusi töörežiimi kohta leiate lehelt [FrankenPHP kaitsmine](https://phpsos.de/et/server/frankenphp/).

> **Oluline:**
> Ärge unustage kõrvalkonteinereid: cron- ja järjekorra tööprotsessid, haldustööriistad või lavastuskeskkonnad (staging) kasutavad sageli sama PHP tõmmist, kuid töötavad oma konteinerites. Iga neist tuleb uuesti luua.

## Ajutised meetmed konteineris

Kui uuendus veel ei õnnestu, kehtivad php.net-i ajutised meetmed ka konteineris. Need ei ole täielik kaitse. Mälupiirang kuulub seejuures konteinerile, sest php.net soovitab seda konteineri või cgroupi kaudu, mitte `RLIMIT_AS` või `RLIMIT_DATA` kaudu:

```ini
; nt failina tõmmises: /usr/local/etc/php/conf.d/zz-uebergang.ini
memory_limit = -1
post_max_size = 8M
upload_max_filesize = 6M
session.upload_progress.enabled = 0
```

```bash
docker run --memory=1g ...         # või Compose'is: deploy.resources.limits.memory
```

Kohandage väärtust oma rakendusele. Jälgige, et rakendus ei saaks `memory_limit`-i ise üle kirjutada; PHP-FPM-i puhul seadke väärtused selleks poolis `php_admin_value` abil. Uus seadistus rakendub alles siis, kui konteiner on uuesti loodud või uuesti käivitatud; taaskäivituse taust on kirjas lehel [PHP-FPM-i ja kõigi tööprotsesside taaskäivitus](https://phpsos.de/et/php2shell/php-fpm-neustart/).

## Et järgmisel korral läheks kiiremini

- Ehitage tõmmised regulaarselt ja automaatselt uuesti, mitte ainult koodimuudatuste korral.
- Kasutage haru sildiga baastõmmiseid ja versioneerige ehitatud seisu kuupäeva või digestiga.
- Laske tõmmised enne juurutamist teadaolevate turvaaukude suhtes kontrollida ja käitage konteinereid ilma root-õigusteta.
- Pidage inventari, millised konteinerid millist tõmmist kasutavad.

## Kuidas PHP SOS konkreetselt aitab?

- **Seisu kaardistamine:** Kontrollime kõiki töötavaid konteinereid, nende tõmmiseid ja PHP versioone, ka kõrvalkonteinereid ja stagingut.
- **Uuesti ehitamine ja juurutamine:** [PHP paikamisteenuse](https://phpsos.de/et/leistungen/php-patch-service/) kaudu ehitame tõmmised parandatud versiooniga ja loome konteinerid kontrollitult uuesti.
- **Ülemineku kindlustamine,** kus uuendus sõltub rakendusest: php.net-i väärtused, mälupiirang konteineril.
- **Pidev jälgimine:** [Turvaseirega](https://phpsos.de/et/leistungen/security-monitoring/) hoiame tõmmiste seisu ja konteinerite kahtlast käitumist silma peal.


## Korduma kippuvad küsimused

**Kas docker restart pärast uuendust piisab?**  
Ei. docker restart käivitab konteineri uuesti sama, vana tõmmisega. Peate uue tõmmise ehitama või tõmbama ja konteineri sellest uuesti looma, näiteks käsuga docker compose up -d --force-recreate.

**Kas ametlik PHP tõmmis sisaldab juba parandatud versiooni?**  
Seda kontrollite kõige paremini otse: tõmmake tõmmis uuesti ja käivitage selles php -v. Oodatud on 8.5.12, 8.4.27, 8.3.36 või 8.2.35. Kui tõmmis näitab vanemat numbrit, ei ole see veel uuendatud või pärineb vahemälust.

**Kas PHP on konteineris vähem ohustatud kui hostil?**  
Turvaauk ise mõjub konteineris täpselt samamoodi. Hästi ehitatud konteiner võib sissemurdmise tagajärgi piirata, näiteks ilma root-õigusteta kasutaja ja kirjutuskaitstud failisüsteemiga. Paiga see ei asenda.

## Allikad

- [php.net: turvateated](https://www.php.net/)
- [PHP 8 ChangeLog](https://www.php.net/ChangeLog-8.php)
- [OWASP Cheat Sheets](https://cheatsheetseries.owasp.org/)
