我在 Docker 容器上运行一个 html 文件,其 URL 为:http://localhost:80 我想要使用 NGINX 将其重定向到另一个端口,例如 http://localhost:8080。我对此进行了以下配置:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
sendfile on;
upstream web {
server 127.0.0.1:80;
}
server {
listen 8080;
resolver 127.0.0.11;
autoindex off;
server_name _;
server_tokens off;
location / {
proxy_pass http://web;
}
}
}
但是当我访问 http://localhost:8080 时,出现 502 错误网关错误,以下是我通过 nginx 容器收到的错误:
[error] 22#22: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.17.0.1, server: _, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:80/", host: "localhost:8080"
这是我启动 nginx docker 的方式:
docker run --name nginx -v c:/Users/ds-nginx-conf-main:/etc/nginx -p 8080:8080 -d nginx
以下是 Web 容器或预激容器的 docker compose 文件:
version: "3.7"
services:
web:
build: ui
ports:
- 80:80
depends_on:
- api
api:
build: app
environment:
- PORT=80
ports:
- 8020:80
test:
build:
context: ./
dockerfile: ./test/Dockerfile
答案1
Docker 容器内的进程在其自己的命名空间内运行。
每个容器都有自己的虚拟环回接口,与主机的环回接口是分开的。
如果您想从一个容器内部访问另一个容器,则需要将这些容器链接在一起。
docker run --link othercontainer ...
然后您可以通过名称从第二个容器访问第一个容器。
其他选项是在 docker 内部创建一个由两个容器使用的网络,或者让两个容器使用主机网络(通常不鼓励这样做,因为它增加了容器的攻击面)。