无法到达具有Network_Mode主机的Tomcat Docker容器

时间:2018-07-22 20:56:05

标签: docker tomcat networking

我正在使用docker版本

的Ubuntu 16.04 LTS。
  

Docker版本18.03.1-ce,内部版本9ee9f40

当我使用网络模式主机启动Tomcat服务器时,无法访问它。

$ sudo docker run --rm -d --network host -p 8888:8080 tomcat:8.0

$ curl localhost:8888
curl: (7) Failed to connect to localhost port 8888: Connection refused

当我以默认的桥接网络模式启动它时,一切似乎都很好。

$ sudo docker run --rm -d -p 8888:8080 tomcat:8.0
$ curl localhost:8888
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/8.0.53</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />

问题似乎与Tomcat映像有关。同样的原理适用于Nginx图像。您可以查看一下: https://docs.docker.com/network/network-tutorial-host/#goal,我尝试了。它适用于Nginx图像。

我找不到与此相关的任何文档。您知道Tomcat容器不能与主机网络一起工作的原因吗?

1 个答案:

答案 0 :(得分:2)

如果您在host网络模式下运行,则端口映射不会执行任何操作。您的意思是“使用主机的网络堆栈运行此容器”。因此,您需要在运行tomcat的端口上连接到tomcat,而无需转发。在上面的示例中,该名称为8080

$ sudo docker run --rm -d --network host tomcat:8.0
$ curl localhost:8080
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/8.0.53</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />

nginx示例可以正常工作,因为它们正在连接到端口80,而这正是nginx在其上运行的端口。在该示例中,他们没有进行任何转发。