【问题标题】:Docker nginx container: http code 400Docker nginx 容器:http 代码 400
【发布时间】:2017-12-15 04:11:48
【问题描述】:

我是 docker 新手,我正在尝试从 https://hub.docker.com/_/nginx/ 运行 nginx

  1. 我拉了图片

docker pull nginx

  1. 我正在运行容器

docker run --rm --name=some-nginx -p 8080:80 nginx

但是当我在本地机器的浏览器中打开 localhost:8080 时,总是得到 http 400。来自 docker 输出的日志:

172.17.0.1 - - [14/Dec/2017:23:07:11 +0000] "\x16\x03\x01\x00\xB5\x01\x00\x00\xB1\x03\x03\x81e|u\x93\xFC`Qo\xC8\xE6y\x18{%\x83\x8C\xC2a\xC93V\xB5;\xC0V\xDC\x10{\xC9)X\x00\x00\x1E\xC0+\xC0/\xCC\xA9\xCC\xA8\xC0,\xC00\xC0" 400 173 "-" "-" "-"

怎么了?我检查了容器内的 nginx (curl localhost),它工作正常。

谢谢。

【问题讨论】:

  • 它看起来不像 Nginx 或代理问题。错误 4xx 表示客户端未将正确的数据发送到服务器进行处理。如果您发送代码请求和服务器处理,我认为我们可以为您提供更多帮助。
  • 我不知道。这是一个来自 nginx 的静态页面。我不需要发送数据,只需获取 localhost:8080 的请求
  • 状态页面应该只是告诉你错误(当你想到网络代理时)。错误 4xx 告诉您来自 web 的数据正在通过 Nginx 传递,其中一些数据正在到达您的服务器处理程序。这意味着您的服务 (localhost:8080) 不知道如何解释这些数据。我认为你应该提供更详细的案例描述。
  • 法比亚诺,感谢您的帮助。我只是按照指南 hub.docker.com/_/nginx 没有自定义配置的新 nginx 安装。我只想查看来自 nginx 的服务页面并了解它是如何工作的(我的意思是 docker 和 nginx 容器 -> 本地机器)。
  • 您可以打开http://localhost:8080 而不仅仅是localhost:8080。如果您不指定,浏览器可能会假定为 https

标签: macos docker nginx networking docker-for-mac


【解决方案1】:

我现在明白了。这有点复杂,但我会尽量简化:

您正在将 8080 主机端口绑定到 80 容器端口。所以,如果你在主机上做curl localhost,这意味着你不是在容器内调用Nginx服务,而是在你的*nix系统中调用80端口进程。同样,如果你在容器内发送相同的命令,它会起作用,因为它在容器内暴露了默认的 http 端口(80),但在容器外没有。您可以致电curl localhost:8080 确认此假设。如果这个作为容器命令返回,那就对了。

可以理解吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2018-03-20
    • 2015-12-23
    • 2016-12-28
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多