Docker容器的连接被拒绝的nginx代理

rnmwe5a2  于 2023-05-16  发布在  Nginx
关注(0)|答案(2)|浏览(494)

我正在尝试在两个docker容器之间设置nginx代理传递。我的前端容器似乎工作正常,但当我试图访问后端时出现502错误。我有两个docker-compose文件:
docker-compose.yml

version: "3.1"

services:
  backend:
    image: backend_image
    container_name: backend_container
  frontend:
    container_name: frontend_container
    image: frontend_image
  proxy:
    container_name: proxy_container
    image: nginx
    restart: unless-stopped
    ports:
      - "8080:80"
    depends_on:
      - website
      - frontend

docker-compose-development.yml

version: "3.1"

services:
  backend:
    container_name: backend_container_development
  frontend:
    build:
      context: ./site/public_html/frontend
      target: runner
    volumes:
      - ./site/public_html/frontend:/app
    command: npm run dev
    ports:
      - "3000:80"
    environment:
      NODE_ENV: development
  proxy:
    volumes:
      - ./nginx/local.conf:/etc/nginx/nginx.conf
      - ./logs:/var/logs

我的nginx local.conf文件:

events {
    worker_connections 1024;
}

http {
    server {
        listen 80 default_server;

        location / {
            proxy_pass http://frontend:3000;
            error_log /var/log/frontend_errors.log;
        }

        location /api {
            proxy_pass http://backend:8000;
            error_log /var/log/backend_errors.log;
        }
    }
}

这是我收到的错误
[error] 29#29: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.48.1, server: , request: "GET /api HTTP/1.1", upstream: "http://192.168.48.3:8000/api", host: "localhost:8080"
我已经验证了后端和前端容器的IP是192.168.48.3,并且容器分别在localhost:8000和localhost:3000上运行

fcy6dtqo

fcy6dtqo1#

错误消息“connect()failed(111:Connection refused)”表示Nginx无法连接到http://backend:8000的后端容器。以下是您可以采取的解决问题的一些步骤:
1.检查后端容器:通过运行docker ps验证后端容器是否正在运行。如果它没有运行,用docker-compose up backend启动它。
1.验证后端容器的端口:检查后端容器是否正在侦听端口8000。您可以通过运行docker-compose exec后端netstat -tlnp并验证端口8000是否在打开端口列表中来完成此操作。
1.检查网络连接:确保前端和后端容器可以在网络上相互通信。你可以通过运行docker-compose exec frontend ping backend和docker-compose exec backend ping frontend来实现。
1.验证Nginx配置:确保nginx.conf文件的location /API块中的proxy_pass指令中的后端服务拼写正确。另外,通过运行docker-compose exec proxy ping backend,检查是否可以从代理容器访问后端容器。
1.检查后端容器日志:检查后端容器的日志,以了解可能指示其不响应原因的任何错误消息。你可以通过运行docker-compose logs backend来实现。
1.验证后端容器的IP地址:验证后端容器是否正在侦听Nginx尝试连接的IP地址。您可以通过运行docker-compose exec后端netstat -tlnp来完成此操作|grep 8000。
如果这些步骤都没有帮助,您可能需要提供更多信息,例如Dockerfiles的内容或前端容器日志中的任何错误消息。

4sup72z8

4sup72z82#

今天遇到了同样的问题,应该使用容器的“内部”端口,在您的情况下:80而不是:3000:8080

proxy_pass http://frontend:80;
...
proxy_pass http://backend:80;

相关问题