诚然,我在使用Docker进行环境隔离方面相对较新,但我遇到了一个尚未解决的问题,我正在寻求一些关于如何继续工作的建议。抱歉,如果这太简单了。
我有一个用这个Dockerfile构建的图像:
FROM java:7-jre
MAINTAINER me <email redacted>
ENV CATALINA_HOME="/usr/local/tomcat"
ENV PATH=$CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
#Add tomcat tarball with configs
#need to figure out if war files should be auto-deploy or manual-deploy via manager
ADD ./ $CATALINA_HOME
WORKDIR $CATALINA_HOME
RUN tar -xmvf tomcat.tar.gz --strip-components=1 \
&& rm bin/*.bat \
&& rm tomcat.tar.gz*
EXPOSE 8080
#quite possibly unnecessary to expose 61616
EXPOSE 61616
CMD catalina.sh run因为我的主机是Mac,所以我使用的是boot2docker包。端口转发是一个真正的皮塔,但是现在我只是在运行容器(-p 8080:8080)时将主机8080绑定到容器8080,并且在boot2docker网络设置中转发了8080。
这个映像很好地运行了一个容器,并且我能够在这个容器运行时手动地上传和部署.war文件。
在我的本地机器上,我正在运行ActiveMQ。最后,我会把这个放在一个容器里,但我需要先通过这个障碍。ActiveMQ正在运行,默认端口61616正在侦听,如此netstat输出所示:
14:14 $ netstat -a | grep 6161
tcp46 0 0 *.61616 *.* LISTEN我遇到的问题是,在我的tomcat容器中部署的war文件无法在61616上与物理主机对话。下面是容器上的catalina.out日志的实际错误(我添加了一些换行符以便于阅读):
Could not refresh JMS Connection for destination 'request' - retrying in 5000 ms.
Cause: Error while attempting to add new Connection to the pool; nested exception is javax.jms.JMSException:
Could not connect to broker URL: tcp://localhost:61616.
Reason: java.net.ConnectException: Connection refused诚然,我认为这是因为war文件被配置为使用localhost:61616连接到AMQ --容器中的本地主机无法“工作”到主机。我不确定应该将它设置为哪个变量值,或者这是否是实际问题。我认为如果它是一个动态分配的黑魔法IP地址,那么继续在war文件中重新配置会比较痛苦。
推论:如果我想将这个tomcat容器与一个AMQ连接起来,我还需要做一些其他的考虑吗?
提前感谢您的关注。~P
发布于 2015-02-02 22:37:58
首先,不需要在容器上公开61616。(这将允许容器监听端口61616,这不是您想要的。)
不过,您需要的是从码头容器中访问码头的本地主机(您的boot2docker VM)。到目前为止,我从this answer找到的最好的方法是在您的码头容器中运行:
export DOCKER_HOST_IP=$(route -n | awk '/UG[ \t]/{print $2}')这将为您提供boot2docker VM的IP地址,从当前的停靠容器中可以看到这一点。我将由您来决定如何配置JMS客户端来连接到该IP地址,但想到的一个想法是:
echo $DOCKER_HOST_IP my-jms-hostname >> /etc/hosts然后,您可以硬编码您的JMS配置,以访问my-jms-hostname:61616。
我建议您将上述两个命令放入启动脚本中,用于在容器中启动应用程序服务器。
接下来,您需要找到一种将boot2docker VM上的端口隧道到本地主机操作系统的方法。例如,在本地主机操作系统上运行
boot2docker ssh -R61616:localhost:61616这将在远程(boot2docker VM)端口61616上侦听,并将其转发到本地主机OS的本地主机:61616,希望ActiveMQ能够在那里愉快地侦听来自应用服务器的JMS的传入连接。
https://stackoverflow.com/questions/28119069
复制相似问题