我正在使用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容器不能与主机网络一起工作的原因吗?
答案 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在其上运行的端口。在该示例中,他们没有进行任何转发。