如何使用spotify docker client连接到主机上的docker守护程序

问题描述 投票:0回答:1

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

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

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

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

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

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

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

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

java spring docker spotify
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.