【问题标题】:How to connect to the docker daemon on the host using spotify docker client如何使用 spotify docker 客户端连接到主机上的 docker 守护进程
【发布时间】:2019-04-07 17:40:35
【问题描述】:

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

我尝试使用-v /var/run/docker.sock:/var/run/docker.sock 将主机(带有 Docker 桌面的 Windows 10 Pro,也尝试了 Ubuntu Server 18.04)的 docker 套接字安装到容器中。 我也尝试使用--net="host"。 两者都没有工作,尽管第二个容器确实 not 崩溃但在我的 java 应用程序的日志中产生了一个不同的错误 ({}->unix://localhost:80: Connection refused),这表明它甚至找不到正确的恶魔的地址。 我还激活了“在没有 TLS 的情况下在 tcp://localhost:2375 上公开守护进程”。 我还尝试将容器内的 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】:

    原来有一个新版本的 spotify-docker 可以解决我的问题。 从v8.15.1 更新到v8.15.2 解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 2016-07-11
      • 2014-03-19
      • 1970-01-01
      相关资源
      最近更新 更多