我的代码无法到达Docker Socket
$client = new GuzzleHttp\Client();
$test = $client->request('GET','http://v1.40/containers/json',[
'curl' => [CURLOPT_UNIX_SOCKET_PATH => '/var/run/docker.sock']
]);
字符串
我只得到一个通用的cURL错误7,我已经检查了套接字是可用的,并在容器内与cURL命令从cmd。只有当我试图通过PHP连接时,它才失败,坦率地说,我没有主意了。
2条答案
按热度按时间p3rjfoxz1#
所以以防将来有人偶然发现这个问题,遇到同样或类似的问题。
Guzzle不是这个例子中的问题,而是phpfpm。我没有意识到官方php docker镜像中的phpfpm worker默认使用www-data用户。我使用的方法是在www.conf中更改用户(docker中默认为
/usr/local/etc/php-fpm.d/www.conf
)字符串
您必须将
-R
标志附加到run命令,以允许以root身份运行worker。ktecyv1j2#
/var/run/docker.sock
属于docker
组。为了与它进行交互,只需添加PHP进程运行的用户,例如。www-data
,组。字符串
这避免了直接升级到
root
,但也带来了一系列危险。请参阅有关Linux post-install和安全性的Docker文档。