docker - 无法访问具有 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容器不能与主机网络一起工作的原因吗?
解决方案
如果您在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 正在运行的端口。在该示例中,他们没有进行任何转发。
推荐阅读
- javascript - 使用 push() 方法和 indexOf() 方法从 AngularJS1 中的数组中删除/检查重复的日期
- swift - 如何同步两个异步函数
- wordpress - 通过 API 为新域安装 SSL 证书和虚拟主机
- python - Python 中不支持的操作数类型
- php - React JS表单连接Mysql DB
- amazon-redshift - 无法根据初始操作查询所需数据
- excel - 根据条件向不同的单元格添加值 - Excel
- python - 使用 pdfminer 或任何其他库从 python 中选择性读取数据
- opencv - 三、CanvasTexture 需要更新无帮助
- ios - 如何配置 VSCode 以在带有 React Native 的 iPhone 上运行