Как найти URL-адрес API-интерфейса Docker?
Я установил плагин шага сборки Docker для Jenkins.
Документация говорит мне:
Name : Choose a name for this Docker cloud provider
Docker URL: The URL to use to access your Docker server API (e.g: http://172.16.42.43:4243)
Как найти URL-адрес API REST (у меня установлен Docker на моем хосте)?
Ответы
Ответ 1
Если вы находитесь в Linux и вам нужно подключиться к Docker API на локальном компьютере, его URL-адрес, вероятно, unix:///var/run/docker.sock
, как это указано в документации: Разработка с помощью SDK Docker Engine и API
По умолчанию демон Docker прослушивает unix:///var/run/docker.sock
и клиент должен иметь root-доступ для взаимодействия с демоном. Если в вашей системе существует группа, названная докере, докер применяет право собственности на сокет на группу.
Это может быть полезно, если вы подключаетесь к Docker из среды JetBrains.
Ответ 2
Вот два подхода.
Как я могу получить доступ к Docker REST API удаленно?
Предупреждение. После этой настройки ваш порт Docker REST API (в данном случае 1111) будет доступен для удаленного доступа.
Вот как я включил его в Ubuntu 16.04 (Xenial Xerus).
-
Отредактируйте файл службы /lib/systemd/system/docker.service
(лучше избегать непосредственного редактирования /lib/systemd/system/docker.service
как он будет заменен при обновлении)
sudo systemctl edit docker.service
-
Добавьте следующий контент
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:1111
Для докера 18+ содержимое немного отличается:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:1111
-
Сохраните измененный файл. Здесь я использовал порт 1111, но можно использовать любой свободный порт.
-
Убедитесь, что служба Docker замечает измененную конфигурацию:
systemctl daemon-reload
-
Перезапустите сервис Docker:
перезапуск докера службы sudo
-
Тестовое задание
curl http://localhost: 1111/version
-
Увидеть результат
{ "Версия": "17.05.0-се", "ApiVersion": "1,29", "MinAPIVersion": "1.12", "GitCommit": "89658be", "GoVersion": "go1.7.5", "Ос": "Linux", "арка": "amd64", "KernelVersion": "4.15.0-20-родовое", "BuildTime": "2017-05-04T22: 10: +54,638119411 + 00: 00"}
Теперь вы можете использовать REST API.
Как получить доступ к Docker REST API через сокет (с локального хоста)?
Подключите внутренний сокет Unix примерно так,
Использование curl
curl --unix-socket /var/run/docker.sock http:/localhost/version
А вот как это сделать с помощью PHP
$fs = fsockopen('/var/run/docker.sock');
fwrite($fs, "GET / HTTP/1.1\r\nHOST: http:/images/json\r\n\r\n");
while (!feof($fs)) {
print fread($fs,256);
}
В PHP 7 вы можете использовать curl_setopt с опцией CURLOPT_UNIX_SOCKET_PATH.
Ответ 3
Это зависит от вашего хоста, но ищите /etc/default/docker
или /var/lib/boot2docker/profile
(для хостов Docker Machine, используя VM2 boot2docker).
Вы увидите порт, используемый демкером докеров, например:
DOCKER_OPTS="-H unix:// -H tcp://0.0.0.0:2375"
^^^^^
Затем получите IP-адрес машины, на которой установлен ваш демон Docker. (При создании узла Docker Machine это будет: docker-machine ip <yourmachine>
.)
Используемый URL-адрес представляет собой комбинацию тех IP-адресов и порта.
Ответ 4
Если вы находитесь в окнах:
npipe:////./pipe/docker_engine
источник: https://docs.docker.com/docker-for-windows/faqs/#how-do-i-connect-to-the-remote-docker-engine-api