Как найти 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).

  1. Отредактируйте файл службы /lib/systemd/system/docker.service (лучше избегать непосредственного редактирования /lib/systemd/system/docker.service как он будет заменен при обновлении)

    sudo systemctl edit docker.service

  2. Добавьте следующий контент

[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
  1. Сохраните измененный файл. Здесь я использовал порт 1111, но можно использовать любой свободный порт.

  2. Убедитесь, что служба Docker замечает измененную конфигурацию:

    systemctl daemon-reload

  3. Перезапустите сервис Docker:

    перезапуск докера службы sudo

  4. Тестовое задание

    curl http://localhost: 1111/version

  5. Увидеть результат

    { "Версия": "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-адресов и порта.