使用PhpStorm运行

时间:2017-04-10 11:04:42

标签: php docker phpstorm docker-compose stream-socket-client

我遇到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:资源(4,流)

这是正确的。

当我docker exec php_container /var/www/web/app_dev.php时,我得到:

  

/var/www/web/app_dev.php:9:      类型(流)的资源(20)

这也是正确的。

但是当我使用配置好的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

我做了一些测试,看起来在尝试使用任何其他容器的主机:端口时存在问题,但它在使用docker network之外的任何东西时都有效。

例如,使用'172.21.0.103:3306'(MySQL容器)问题仍然存在,但对于'google.com:80',它也可以通过PhpStorm Run功能工作。

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 个答案:

没有答案