Apache Connection Отклонено при запуске Java-API Docker-клиента

2

Я пытаюсь установить удаленную библиотеку API Docker-client (https://github.com/spotify/docker-client), чтобы выполнить некоторые поиски изображений и просмотреть данные изображений (все в публичных хранилищах). У меня загружена, установлена ​​и запущена загрузочная VM boot2docker. Такие команды, как "Docker pull ubuntu", работают нормально, но я хотел бы сделать это с помощью программы Java сейчас. Я использовал плагин Eclipse IDE Egit для импорта проекта github и создал проект Maven/Java из существующей ветки мастера. Исходный код полностью импортирован и ошибок не сообщается. Затем я попробовал написать простой тест:

    final DockerClient docker = DefaultDockerClient.fromEnv().build();
    //docker.pull("busybox");
    List<ImageSearchResult> results = docker.searchImages("ubuntu");
    for (ImageSearchResult res : results) {
        System.out.println(res.getName());
    }

Однако при запуске кода в Eclipse я получаю следующую ошибку:

Exception in thread "main" com.spotify.docker.client.DockerException: java.util.concurrent.ExecutionException: javax.ws.rs.ProcessingException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect
at com.spotify.docker.client.DefaultDockerClient.propagate(DefaultDockerClient.java:1109)
at com.spotify.docker.client.DefaultDockerClient.request(DefaultDockerClient.java:1028)
at com.spotify.docker.client.DefaultDockerClient.searchImages(DefaultDockerClient.java:653)
at com.spotify.docker.client.main.Test.main(Test.java:28)

Я попытался настроить сервер Apache на этом порту, но затем я получаю:

Exception in thread "main" com.spotify.docker.client.DockerRequestException: Request error: GET http://localhost:2375/v1.12/images/search?term=ubuntu: 404
at com.spotify.docker.client.DefaultDockerClient.propagate(DefaultDockerClient.java:1100)
at com.spotify.docker.client.DefaultDockerClient.request(DefaultDockerClient.java:1028)
at com.spotify.docker.client.DefaultDockerClient.searchImages(DefaultDockerClient.java:653)
at com.spotify.docker.client.main.Test.main(Test.java:28)

Может ли кто-нибудь сказать мне, что я должен делать здесь, чтобы заставить мой поиск/вытащить вызов? Это моя первая попытка с Docker, и я просмотрел документацию и искал проблему, но не могу найти никого с аналогичной проблемой.

Спасибо!

EDIT: я запускаю докер в Windows 7 с помощью встроенного VM Boot2Docker. Может быть, демон Docker работает внутри, который недоступен из программ вне VM, таких как Eclipse?

РЕДАКТИРОВАТЬ: разрешил его, обновив v1.6 вместо v1.5, что делает демон доступным на хосте Windows. Текущая проблема заключается в том, что все мои вызовы API возвращаются "Сервер не смог ответить с допустимым ответом HTTP"

  • 0
    Вы запускали свою Java-программу на хосте boot2docker TinyCore VM Linux?
  • 0
    Нет, я запускаю его вне его в Windows 7 в Eclipse. Я только начал понимать: демон Docker недоступен за пределами виртуальной машины, не так ли? Как бы я смог запустить свою Java-программу на ВМ? Я думаю, что самый простой вариант - просто установить Docker на Linux и работать оттуда.
Показать ещё 1 комментарий
Теги:
maven
docker

3 ответа

2

Я столкнулся с подобной проблемой, и мне удалось решить эту проблему, используя следующий способ создания DockerClient:

final DockerClient docker = DefaultDockerClient.builder()
                    .uri(URI.create("unix:///var/run/docker.sock"))
                    .build();

Я получал такое же исключение, но добавление вышеописанной части URI помогло мне решить проблему. Лучшее объяснение проблемы, аналогичной вышеизложенному и ее устранению, было предоставлено в следующем трекеру проблем.

https://github.com/spotify/docker-maven-plugin/issues/61

1

Программа Java по существу представляет собой docker search: она может работать только в среде, в которой присутствует механизм докеров.

Либо в виртуальной машине boot2docker.
Или на полном хосте Linux.

  • 0
    теперь есть клиент Docker для Windows - так что другой вариант - установить его и настроить для использования сервера Docker в VM.
  • 0
    @ISanych не совсем возможно: в виртуальной машине TinyCore нет постоянства: stackoverflow.com/a/29507588/6309
Показать ещё 4 комментария
0

Я столкнулся с одной и той же проблемой на Mac с eclipse и Docker версии 1.10.3, я искал решение, прежде чем решился на обходной путь. Использование docker CLI docker-manager для создания нового виртуального бокса и получения DOCKER_HOST и DOCKER_CERT_PATH значения этого виртуального бокса и создать новый строитель.

В моем случае: я создал виртуальный блок по умолчанию2 с помощью команды CLI докере docker-machine create -d virtualbox default2

Docker CLI

$ docker-machine env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.103:2376"
export DOCKER_CERT_PATH="/Users/XXXX/.docker/machine/machines/default2"
export DOCKER_MACHINE_NAME="default2"

Докер-клиент JAVA

DockerCertificates defaultCertificates = new DockerCertificates(Paths.get("/Users/XXXX/.docker/machine/machines/default2"));    
DockerClient docker = DefaultDockerClient.builder()
                .uri("https://192.168.99.103:2376")
                .dockerCertificates(defaultCertificates)
                .build();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню