stream_socket_client тайм-аут между контейнерами при использовании PhpStorm Run

У меня проблема с 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и т. д. здесь, поэтому, если потребуется какая-либо другая конкретная часть конфигурации, просто позвольте мне сейчас в комментарии.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]