У меня есть PHP-приложение, работающее в Docker, и по какой-то причине большинство запросов из контейнера завершаются с ошибкой таймаута, например, запросы через Symfony HTTP Client или команда composer install.
Похоже, что контейнер не может выполнять HTTPS-запросы. По крайней мере, в большинстве случаев: Google, Facebook, Yandex отвечают нормально, как будто всё в порядке.
Единственный способ, которым мне удалось заставить эти запросы работать, — это использование network_mode: host, но я не хочу использовать этот режим из соображений безопасности. К тому же в этом случае PHP перестал получать запросы от Nginx.
Более того, тот же контейнер локально выполняет эти запросы без проблем, что заставляет меня думать, что проблема в фаерволе. При настройке я следовал этому руководству
ufw-docker.
TL;DR
У меня есть PHP и Nginx в Docker, они могут общаться друг с другом, я могу успешно подключиться к приложению и получить ответ, но исходящие HTTPS-соединения блокируются (по крайней мере, те, которые мне нужны).
Большинство запросов через curl заканчиваются так:
$ curl https://raw.githubusercontent.com/ -v -4
* Host raw.githubusercontent.com:443 was resolved.
* IPv6: (none)
* IPv4: 185.199.109.133, 185.199.108.133, 185.199.111.133, 185.199.110.133
* Trying 185.199.109.133:443...
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/cert.pem
* CApath: none
* Connection timed out after 300004 milliseconds
* closing connection #0
curl: (28) Connection timed out after 300004 milliseconds
Те же самые запросы, выполненные с хоста и из этого контейнера локально, работают нормально. Использую образ
php:8.3-fpm-alpine
, сервер —
Ubuntu 24.04
.