我正在使用 docker 版本的 Ubuntu 16.04 LTS
Docker version 18.03.1-ce, build 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 容器无法与主机联网的原因吗?
最佳答案
如果您在 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 的端口。在该示例中,他们没有进行任何转发。
关于docker - 无法访问具有 Network_Mode 主机的 Tomcat Docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51469175/