PHP无法通过curl访问docker socket

fnvucqvd  于 2023-08-03  发布在  Docker
关注(0)|答案(2)|浏览(142)

我的代码无法到达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连接时,它才失败,坦率地说,我没有主意了。

p3rjfoxz

p3rjfoxz1#

所以以防将来有人偶然发现这个问题,遇到同样或类似的问题。
Guzzle不是这个例子中的问题,而是phpfpm。我没有意识到官方php docker镜像中的phpfpm worker默认使用www-data用户。我使用的方法是在www.conf中更改用户(docker中默认为/usr/local/etc/php-fpm.d/www.conf

user = root
group = root

字符串
您必须将-R标志附加到run命令,以允许以root身份运行worker。

ktecyv1j

ktecyv1j2#

/var/run/docker.sock属于docker组。为了与它进行交互,只需添加PHP进程运行的用户,例如。www-data,组。

sudo usermod -aG docker www-data

字符串
这避免了直接升级到root,但也带来了一系列危险。请参阅有关Linux post-install和安全性的Docker文档。

相关问题