在Docker容器外执行外部服务

时间:2019-07-17 12:14:48

标签: docker jenkins glassfish

我在linux机器上有一个glassfish服务器,还有一个运行jenkins的docker容器。我想执行一些glassfish命令,但从码头工人看来,glassfish尚未启动。我收到的消息是:

Remote server does not listen for requests on [localhost:4848]. Is the server up?

Glassfish在linux的端口8080和admin的4848上运行。我为jenkins运行docker的方式是:

docker run --rm -d --name jenkins \
        --expose 4848 \
        -v /opt/glassfish3:/opt/glassfish3 \
        -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker \
        -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone \
        -v $GF/libs:$JH/libs \
        -p 8081:8080 -p 50000:50000 jenkins/jenkins:lts

尽管玻璃鱼飞起来了,詹金斯却看不到它。

有什么建议吗?

谢谢

1 个答案:

答案 0 :(得分:1)

docker默认情况下会创建bridged network,因此Glassfish和Jenkins位于不同的网段。

从收到的消息中,似乎该命令尝试连接到localhost上的Glassfish。相反,您需要连接到Linux机器的IP地址(我假设它是主机)。 在主机上运行ip命令(或ifconfig)以获取IP地址:

ip addr show docker0 

({docker0docker创建的以太网桥设备)

默认情况下,Glassfish侦听0.0.0.0(所有网络接口),因此它也应侦听docker0。然后使用asadmin选项(运行域管理服务器的计算机名称)运行--host。例如:

asadmin --host <ip of linux machine> list-applications

也可以使用默认网络接口代替docker0

或者,您可以在host mode中运行jenkins容器。在主机模式下,它与主机共享网络接口,因此它将能够连接到localhost

希望有帮助