当使用PhpStorm运行时,stream_socket_client容器之间的超时
我有stream_socket_client()
函数的问题,但只在某些情况下。
我使用docker-compose来构build包含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
是正确的,并为Mailcatcher的静态 IP:端口。
现在,如果我通过浏览器请求这个文件,我得到:
/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:types(stream)的资源(20)
这也是正确的。
但是当我使用configuration的Docker远程解释器(通常工作正常)通过PhpStorm(选项“运行>运行…”)运行此脚本时,我得到输出:
docker:// php_container:latest / php /var/www/web/app_dev.php
警告:stream_socket_client():无法连接到第5行/var/www/web/app_dev.php中的172.21.0.106:1025(连接超时)
调用堆栈: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结束
我做了一些testing,看起来像尝试使用任何其他容器的主机端口时存在的问题,但它使用Dockernetworking之外的任何东西时工作。
例如,使用'172.21.0.103:3306'
容器)的问题仍然存在,但与'google.com:80'
,它也可以通过PhpStorm运行function。
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
等放在这里,所以如果需要其他任何特定的configuration部分,请让我现在在评论。