在 docker 容器外执行外部服务

Execute an external service outside a docker container

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

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

Glassfish 运行在 8080 端口的 linux 和 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

虽然 glassfish 启动了,但 jenkins 没有看到它。

有什么建议吗?

谢谢

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 选项(域管理服务器所在的机器名是 运行ning)。例如:

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

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

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

希望对您有所帮助