Как мне связаться с демоном docker изнутри контейнера с помощью сокетов Unix?

В java, \n всегда генерирует символ \u000A linefeed. Чтобы получить правильный разделитель строк для конкретной платформы, используйте %n.

Поэтому используйте \n, когда вы уверены, что вам нужен символ \u000A linefeed, например, в сети. Во всех других ситуациях используйте %n

1
задан J. Munson 31 March 2019 в 01:17
поделиться

1 ответ

API-интерфейс демона Docker может быть связан с использованием конечных точек HTTP и по умолчанию прослушивает сокет UNIX. Это означает, что вы можете общаться с ним, как с любым обычным HTTP-сервером, с небольшой дополнительной обработкой, когда это сокет.

Вы получаете сообщение об ошибке, поскольку, отправляя запрос в сокет, вы запрашиваете неверный путь. Синтаксис запроса:

PROTOCOL://unix:SOCKET_PATH:ENDPOINT_PATH

Для вашего кода это означает:

const data = await got('unix:/var/run/docker.sock:/var/run/docker.sock')

// protocol      = http (default by library)
// socket path   = /var/run/docker.sock
// endpoint path = /var/run/docker.sock

Чтобы исправить проблему, вам следует запросить действительную конечную точку API Docker Engine ( документация для v1.39 ) в качестве пути HTTP. Пример списка контейнеров:

await got('unix:/var/run/docker.sock:/containers/json')

Если у вас есть curl под рукой, вы можете проверить это из вашей оболочки:

$ curl --unix-socket /var/run/docker.sock http://containers/json
0
ответ дан hexacyanide 31 March 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: