PHP в Docker с NTLM-прокси: невозможно назначить запрошенный адрес - PullRequest
0 голосов
/ 11 октября 2018

У меня Windows-10 с Docker 18.06.0-ce-win72 (19098).В нашей сети используется NTLM-прокси, поэтому докер выходит в Интернет через Ntlmaps (я тоже пытаюсь Cntlm , результат тот же).Я запускаю образ на основе php: 7.2-fpm с помощью docker-compose.Я вхожу в контекст

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 => on

Я обнаружил похожую проблему: https://github.com/composer/composer/issues/2169

Но яне могу отключить IPv6 в Docker для проверки решения.

Я пытаюсь запустить " 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 голосов
/ 07 ноября 2018

Решение для 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);
...