2

我是 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,它可以工作。

谢谢你。

4

1 回答 1

1

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

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

是否可以理解?

于 2017-12-15T06:12:36.553 回答