Задать вопрос

Почему не проходят HTTPS запросы из Docker контейнера?

У меня есть 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.
  • Вопрос задан
  • 60 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы