Я хочу запустить приложение 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
Ожидаемый результат: приложение подключается к докеруклиент с хоста и может развертывать / управлять контейнерами на хосте
Фактический результат: контейнер аварийно завершает работу или выдает ошибки.