Как подключиться к демону docker на хосте с помощью клиента spotify docker - PullRequest
0 голосов
/ 07 апреля 2019

Я хочу запустить приложение Java Spring внутри док-контейнера, и это приложение должно иметь возможность развертывать контейнеры-братья.Когда я запускаю приложение Java непосредственно на моей машине, оно работает нормально и может развертывать контейнеры, но как только я пытаюсь запустить приложение внутри контейнера, оно больше не работает (я использую supervisord для запуска приложений mongodb и Java Spring водин контейнер, и я знаю, что это не лучшая практика).Контейнер запускается нормально, но вылетает, как только мое приложение пытается подключиться к Docker deamon без каких-либо трассировок стека из Java, только ошибка WARN received SIGTERM indicating exit request.Журналы супервизора не содержат дополнительной информации.

Я попытался смонтировать докер-сокет с хоста (Windows 10 Pro с Docker Desktop, также пробовал Ubuntu Server 18.04) в контейнер, используя -v /var/run/docker.sock:/var/run/docker.sock.Я также пытался использовать --net="host".Оба не работали, хотя со вторым контейнер не аварийно завершает работу, но выдает другую ошибку ({}->unix://localhost:80: Connection refused), видимую в журнале моего Java-приложения, которая указывает, что он не может даже найти правильный адресдля демона.Я также активировал «Разоблачить deamon на tcp: // localhost: 2375 без TLS».Я также попытался установить для переменной среды DOCKER_HOST внутри контейнера значения по умолчанию, такие как «tcp: // localhost: 2375» или «/var/run/docker.sock".

. Вот код, который яиспользуйте для инициализации клиента Docker.

DockerClient docker = DefaultDockerClient.fromEnv().build();

DefaultDockerClient.fromEnv().build(); должен создать клиент Docker, который использует переменную среды DOCKER_HOST для подключения к хосту или адресу по умолчанию ("/var/run/docker.sock"на * NIX).

Вот мой DOCKERFILE:

FROM    openjdk:8-jre-alpine

ENV     PACKAGES mongodb supervisor

VOLUME  /opt/server
VOLUME  /data/db
WORKDIR /opt/accservermanager

ADD     supervisord.conf /etc/supervisor.conf
ADD     accservermanager.jar /opt/accservermanager/accservermanager.jar
ADD     application.properties /opt/accservermanager/application.properties

RUN     apk update && \
        apk add --update $PACKAGES --no-cache && \
        rm -rf /var/cache/apk/*

EXPOSE  8000

CMD     ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor.conf"]

И, наконец, мой supervisord.conf

[supervisord]
user=root
stderr_logfile=/var/log/supervisord.err.log
stdout_logfile=/var/log/supervisord.out.log
loglevel=debug

[program:mongodb]
command=mongod --smallfiles
autostart=true
autorestart=true
stderr_logfile=/var/log/mongo.err.log
stdout_logfile=/var/log/mongo.out.log

[program:accservermanager]
directory=/opt/accservermanager/
command=java -jar accservermanager.jar
autostart=true
autorestart=true
stderr_logfile=/var/log/accservermanager.err.log
stdout_logfile=/var/log/accservermanager.out.log

Ожидаемый результат: приложение подключается к докеруклиент с хоста и может развертывать / управлять контейнерами на хосте

Фактический результат: контейнер аварийно завершает работу или выдает ошибки.

1 Ответ

0 голосов
/ 07 апреля 2019

Оказывается, есть новая версия spotify-docker, которая решает мою проблему. Обновление с v8.15.1 до v8.15.2 решило мою проблему.

...