У меня проблема с stream_socket_client()
функционировать, но только при некоторых обстоятельствах.
Я использую docker-compose для создания среды, содержащей nginx, php-fpm (7.1.3) и schickling / mailcatcher (и пару других не важных контейнеров).
Моя проблема связана с SwiftMailer, но я выделил проблему для следующего кода:
// /var/www/web/app_dev.php
$streamContext = stream_context_create();
$timeout = 5;
$_stream = stream_socket_client('172.21.0.106:1025', $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext);
var_dump($_stream);
172.21.0.106:1025
правильно и статический IP: порт для Mailcatcher.
Теперь, если я запрашиваю этот файл через браузер, я получаю:
/var/www/web/app_dev.php:8:resource(4, stream)
что правильно.
Когда я делаю docker exec php_container /var/www/web/app_dev.php
, Я получил:
/var/www/web/app_dev.php:9:
ресурс (20) типа (поток)
что тоже правильно.
Но когда я запускаю этот скрипт через PhpStorm (опция «Выполнить> Выполнить …»), используя настроенный удаленный интерпретатор Docker (в целом работает нормально), я получаю вывод:
Докер: // php_container: последний / php /var/www/web/app_dev.php
Предупреждение: stream_socket_client (): невозможно подключиться к
172.21.0.106:1025 (Тайм-аут соединения) в /var/www/web/app_dev.php в строке 5Стек вызовов:
0,0001 349080 1. {main} () /var/www/web/app_dev.php:0
0,0032 360960 2. stream_socket_client () /var/www/web/app_dev.php:5Процесс завершен с кодом выхода 0
Я провел несколько тестов, и похоже, что проблема существует при попытке использовать хост-порт любого другого контейнера, но он работает при использовании чего-либо за пределами сети докера.
Например, используя '172.21.0.103:3306'
(Контейнер MySQL) проблема остается, но с 'google.com:80'
, он работает также через функцию запуска PhpStorm.
Важная часть docker-compose.yml:
services:
php:
build: ./docker/php
container_name: php_container
volumes:
- .:/var/www
networks:
mynet:
ipv4_address: 172.21.0.102
mailcatcher:
image: schickling/mailcatcher
container_name: mailcatcher
ports:
- "1080:1080"networks:
mynet:
ipv4_address: 172.21.0.106
networks:
mynet:
ipam:
config:
- subnet: 172.21.0.0/24
PHP Dockerfile:
FROM php:7-fpm
RUN apt-get update && apt-get install -y git zlib1g-dev zip unzip libgd-dev
RUN docker-php-ext-install pdo pdo_mysql zip gd
RUN docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache
RUN pecl install xdebug-2.5.0 && docker-php-ext-enable xdebug
WORKDIR /var/www
Было бы довольно много контента, чтобы положить docker-compose.yml
, все Dockerfile
и т. д. здесь, поэтому, если потребуется какая-либо другая конкретная часть конфигурации, просто позвольте мне сейчас в комментарии.
Задача ещё не решена.
Других решений пока нет …