Я могу делать вызовы cUrl для Docker API, но если я запускаю тот же сценарий из контейнера (docker -compose), я не могу достичь какой-либо конечной точки API.
Мои запросы выглядят так :
$ curl --unix-socket /var/run/docker.sock -X POST http:/localhost/containers/json
Причиной может быть использование localhost, но я пока не могу найти решение. Любые предложения?
РЕДАКТИРОВАТЬ: Вот краткий обзор стека, который я использую (Api-Platform https://api-platform.com/). Каждый контейнер подключен к мостовой сети api_default:
- php = Symfony приложение на основе
- nginx = NGINX веб-сервер
- psql = Размещает основную базу данных
- мс sql = Используется для синхронизации c данных
- ...
У меня есть оболочка скрипт в моем контейнере "php", предназначенный для доступа к Docker API. Подводя итог, я прошу контейнер "ms sql" синхронизировать c с внешней службой, а затем я прошу контейнер "psql" скопировать эти данные (экспорт / импорт выполняется с помощью файлов CSV через общие тома).
Проблема в следующем:
- Если я выполняю команду
docker-compose exec php bin/console app:sync
(Symfony, которая запускает скрипт), все работает нормально: контейнеры взаимодействуют через docker .sock с Docker API и я могу синхронизировать c мои базы данных. - Но если я запускаю тот же скрипт с конечной точкой API (localhost: 8080 / api / syn c) или через VueJS app (Ax ios), API Docker никогда не возвращает nany ответ.
Ниже приведена часть моего сценария:
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", ...]
}'
А вот способ, которым я вызовите мою команду Symfony в контроллере конечной точки api:
/**
* @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", чтобы добраться до хорошей сети, но это не работает ...?