带有NTLM-proxy的Docker中的PHP:无法分配请求的地址

时间:2018-10-11 07:26:44

标签: php docker docker-compose ipv6 ntlm

我有带Docker 18.06.0-ce-win72(19098)的Windows-10。 在我们的网络中使用NTLM-proxy,因此docker通过 Ntlmaps 进入Internet(我也尝试使用 Cntlm ,结果相同)。 我使用docker-compose运行基于php:7.2-fpm的映像。 我进入容器

docker exec -it {id} bash

并运行命令:

curl https://packagist.org/packages.json // works!

wget https://packagist.org/packages.json // works!

但是

php -r "echo file_get_contents('https://packagist.org/packages.json');"

结果“ 无法打开流:无法在第1行的命令行代码中分配请求的地址

curl https://packagist.org/packages.json ----> works
php -r "echo file_get_contents('https://packagist.org/packages.json');" ----------> fails to open stream
php -r "echo curl_exec(curl_init('https://packagist.org/packages.json'));" ---------> works

我看到了ntlmaps-console并查看了来自“ curl”的请求,但是控制台中没有来自“ file_get_contents”的请求。

在php中 allow_url_open =>

我发现了类似的问题:https://github.com/composer/composer/issues/2169

但是我不能在Docker中禁用IPv6来测试解决方案。

我尝试运行“ sysctl ”,但是“ bash:sysctl:未找到命令

我尝试设置

sysctls:
  - net.ipv6.conf.all.disable_ipv6=1
  - net.ipv6.conf.default.disable_ipv6=1
  - net.ipv6.conf.lo.disable_ipv6=1

在docker-compose.yml中提供服务,但无法解决问题

我在VPS上运行此容器,并且在VPS上运行。

如何在Windows + NTLM上解决此问题?

我的docker-compose.yml:https://pastebin.com/PfsgzrLs

1 个答案:

答案 0 :(得分:0)

file_get_contents()的解决方案:

    $context = stream_context_create([
        'http' => [
            'proxy' => 'tcp://10.0.75.1:3112', // 3112 - proxy port on host-mashine
            'request_fulluri' => true
        ]
    ]);

    echo file_get_contents('https://ya.ru', false, $context);