【发布时间】:2015-03-23 23:29:21
【问题描述】:
我几乎什么都试过了。
当我通过 ssh 和 curl localhost:8080 转到 docker 容器时,我会看到正常的欢迎页面,但如果我通过 ssh 从我的主机或使用我的主机的主机名从其他所有东西执行curl host_machine_hostname:8082,我会收到错误,禁止访问。
我已经阅读了很多建议,但没有任何帮助。
没有地址的连接器设置没有帮助,带有allow=".*" 的Valve 规则没有帮助,主机地址=host_machine_hostname" 没有帮助。
UPD
对不起。我意识到了问题的根源。我正在使用 tomcat 的自定义分支,并且在允许 127.0.0.1 和 localhost 时,ROOT 和其他预安装的软件包有特定的选项来阻止所有内容。因此,我通过删除特定于包的 context.xml 文件来解决这个问题。
这是因为 webapps/{package}/META-INF/ 中的 context.xml 被修改为阻止一切,如果要读取 TFM,包的 context.xml 比全局 context.xml 文件更强大,这就是为什么我无法更改任何内容修改全局 context.xml。
【问题讨论】:
-
如果您尝试从主机访问容器内的应用程序,首先执行
docker ps并获取特定图像的容器ID。然后docker inspect <container_id>。在NetworkingSettings部分,您将看到容器的IPAddress。然后你可以使用curl IPAddress:8082。我假设你在容器外暴露了 8082 端口。 -
第一个示例中的端口为 8080,第二个示例中的端口为 8082。您的 Tomcat 是否同时发布?
-
@HüseyinBABAL 不,它不起作用。从主机终端使用容器 ip 也因
access forbidden而失败。是的,我已经映射了端口。 0.0.0.0:8082 -> 8080。我需要让它从主机外部访问,因为它只是我的工作服务器,所以它必须可以从其他任何地方访问。 -
@Bryan 我在 docker 容器中使用 tomcat。当我通过 ssh 在容器内时,我可以 curl
localhost:8080并获得正常页面。当我在主机的 ssh 上(服务于 docker 容器)时,当curl localhost:8082时,我无法访问 tomcat 页面并获得access forbidden。端口不同,因为我已将主机端口 8082 映射到容器内的端口 8080。我通过设置 docker 参数-p 8082:8080做到了这一点 -
您的 docker 安装了哪个操作系统> 您在 linux 上使用的是 boot2docker 还是纯 docker?你在使用公共 docker 镜像吗?我也可以测试一下看看问题。
标签: linux tomcat tomcat7 docker