【发布时间】: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