我可以对Docker API进行cUrl调用,但是如果我从容器(docker-compose)运行相同的脚本,则无法访问任何API端点。
我的要求如下:
$ curl --unix-socket /var/run/docker.sock -X POST http:/localhost/containers/json
原因可能是使用本地主机,但暂时找不到解决方案。有什么建议么?
编辑:这是我正在使用(Api-platform https://api-platform.com/)的堆栈的简短摘要。每个容器都连接到“api_default”桥接网络:
我的“php”容器中确实有一个shell脚本,该脚本旨在访问Docker API。总而言之,我请求“mssql”容器与外部服务同步,然后请求“psql”容器复制那些数据(通过共享卷使用csv文件完成的导出/导入)。
问题是 :
docker-compose exec php bin/console app:sync
(运行脚本的Symfony命令),则一切正常:容器通过docker.sock与Docker API通信,并且我可以同步数据库。 以下是我的脚本的一部分:
curl -XPOST -H 'Content-Type: application/json' \
--unix-socket /var/run/docker.sock http:/localhost/containers/mssql/exec \
-d '{
"AttachStdout":true,
"Tty":true,
"Cmd":["/opt/mssql-tools/bin/sqlcmd", ...]
}'
这是我在api端点Controller中调用Symfony命令的方式:
/**
* @Route("/api/sync", name="sync", methods={"GET"})
*/
public function sync(KernelInterface $kernel)
{
$application = new Application($kernel);
$application->setAutoExit(false);
$input = new ArrayInput(array(
'command' => 'app:sync'
));
$output = new BufferedOutput();
$application->run($input, $output);
$content = $output->fetch();
return new Response($content);
}
也许我应该将“localhost”替换为“api_default”以达到良好的网络,但这不起作用...?
最佳答案
您尝试连接的本地主机是运行curl
的容器中的本地主机
您应该找到并替换为其主机IP
关于docker - 无法从容器内访问Docker API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60330390/