首页 > 解决方案 > 无法访问具有 Network_Mode 主机的 Tomcat Docker 容器

问题描述

我正在使用 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容器不能与主机网络一起工作的原因吗?

标签: dockertomcatnetworking

解决方案


如果您在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 正在运行的端口。在该示例中,他们没有进行任何转发。


推荐阅读