如何使用Spotify Docker客户端连接到主机上的Docker守护程序

时间:2019-04-07 17:40:36

标签: java spring docker spotify

我想在docker容器中运行Java Spring应用程序,并且该应用程序应该能够部署同级容器。当我直接在机器上运行Java应用程序时,它可以正常工作并且可以部署容器,但是当我尝试在容器中运行该应用程序后,它就不再起作用(例如,使用超级用户来运行mongodb和Java Spring应用程序)一个容器,我知道那不是最佳做法)。容器启动正常,但是在我的应用程序尝试连接到docker deamon时崩溃,而没有来自Java的任何堆栈跟踪,只是错误WARN received SIGTERM indicating exit request。受监管的日志不包含其他信息。

我尝试使用-v /var/run/docker.sock:/var/run/docker.sock将docker套接字从主机(带有Docker Desktop的Windows 10 Pro,也尝试Ubuntu Server 18.04)安装到容器中。 我也尝试使用--net="host"。 两者都不起作用,尽管在第二个容器中容器不会不会崩溃,但是会产生不同的错误({}->unix://localhost:80: Connection refused),该错误在我的Java应用程序的日志中可见,这表明它甚至找不到守护进程的正确地址。 我还激活了“在没有TLS的tcp:// localhost:2375上公开守护进程”。 我还尝试将容器内的DOCKER_HOST环境变量设置为默认值,例如“ tcp:// localhost:2375”或“ /var/run/docker.sock”。

这是我用来初始化docker客户端的代码。

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

DefaultDockerClient.fromEnv().build();应该创建一个使用DOCKER_HOST环境变量连接到主机或默认地址(* NIX上为“ /var/run/docker.sock”)的Docker客户端。

这是我的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"]

最后,我的supervisor.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

预期结果:应用程序从主机连接到docker客户端,并能够在主机上部署/管理容器

实际结果:容器崩溃或输出错误。

1 个答案:

答案 0 :(得分:0)

事实证明,有一个新版本的spotify-docker可以解决我的问题。 从v8.15.1升级到v8.15.2解决了我的问题。