为什么在简单的 Docker + nginx 配置上出现 Connection Refused 错误?

why Connection Refused error on simple Docker + nginx configuration?

我有这个 Dockerfile:

FROM nginx:latest
COPY devops/nginx_proxy.conf /etc/nginx/conf.d/default.conf
EXPOSE 8080

和一个devops/nginx_proxy.conf:

server {
  listen 8080;
  client_max_body_size        32M;
  underscores_in_headers      on;
}

运行 使用 docker run -p 8080:80 test 的 Dockerfile,然后使用 curl http://localhost/ 进行测试,我看到这个错误:

curl: (7) Failed to connect to localhost port 80: Connection refused

更好奇,curl http://localhost:8080/ returns这个:

curl: (52) Empty reply from server

为什么会出现这些错误?

使用 Docker 您可以 bind 容器端口到使用 -p 选项的主机端口。

一般规则

docker run -p HOST_PORT:CONTAINER_PORT

绑定容器8080端口到宿主机的80

docker run -p 80:8080 test

Ports which are not bound to the host (i.e., -p 80:80 instead of -p 127.0.0.1:80:80) are accessible from the outside

绑定限制访问localhost的端口

docker run -p 127.0.0.1:80:8080 test