容器内的Docker Compose Nginx无法使用同一容器的公共地址

容器内的Docker Compose Nginx无法使用同一容器的公共地址,docker,nginx,docker-compose,reverse-proxy,devops,Docker,Nginx,Docker Compose,Reverse Proxy,Devops,我无法在具有公共IP地址的容器中curl/wget nGinX docker compose services: api: image: api container_name: api build: ./api restart: always networks: - docker-network web: image: web container_name: web build: ./web resta

我无法在具有公共IP地址的容器中curl/wget

nGinX

docker compose

services:
  api:
    image: api
    container_name: api
    build: ./api
    restart: always
    networks:
      - docker-network

  web:
    image: web
    container_name: web
    build: ./web
    restart: always
    networks:
      - docker-network

  proxy:
    image: nginx
    container_name: proxy
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/proxy.conf
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "3001:3001"
      - "3002:3002"

    networks:
      - docker-network

networks:
  docker-network:
    driver: bridge
容器内:

docker ps

docker exec-it web bash

wget example.com
->response 200工作正常

wget:3001
->连接超时


有人能帮助我们理解如何通过公共调用从容器内部调用http/curl/wget到另一个容器吗?这在服务器端渲染的情况下非常有用,我们需要从
api

获取
web
中的数据。事实证明,我在DigitalOcean上使用的是Ubuntu,但是使用CentOS就解决了这个问题

docker exec-it proxy bash
然后
wget/curlhttp://api
要确保您的api在80端口上实际侦听,代理正在80端口上侦听。工作,但不与公共IPU,但您的ngnix配置说,
location/{proxy_passhttp://api}
意味着它将把它在3001上得到的东西代理给
api:80
,因为80是http的默认值。顺便说一下,你的码头工人撰写yaml,看起来不错,应该可以工作。这就是为什么我要研究nginx配置。我尝试在没有nginx的情况下,在容器内部,如果我使用公共IP地址创建wget,它仍然无法解析。这里有一个例子:“docker compose为我们处理网络,因此我们不必知道后端容器在docker网络中的实际IP地址-我们可以简单地通过DNS名称引用它,DNS名称是我们的容器名称,docker为我们处理网络。”
services:
  api:
    image: api
    container_name: api
    build: ./api
    restart: always
    networks:
      - docker-network

  web:
    image: web
    container_name: web
    build: ./web
    restart: always
    networks:
      - docker-network

  proxy:
    image: nginx
    container_name: proxy
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/proxy.conf
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "3001:3001"
      - "3002:3002"

    networks:
      - docker-network

networks:
  docker-network:
    driver: bridge