我有带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
答案 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);