docker 如何通过localhost从一个容器中获取另一个容器?

pkwftd7m  于 2023-08-03  发布在  Docker
关注(0)|答案(1)|浏览(152)

我是 Docker 世界的纽比。我不能把我的头放在一般的docker网络上,特别是如何正确地连接我的后端和docker-compose文件内部的前端。我希望这两个服务通过localhost:port相互通信,而不是使用服务名称。我知道它与网络有关,但不知道如何按照我想要的方式使用它。谢谢你,谢谢
我的docker-compose文件:

version: '3.11'

services:
  db:
    container_name: postgres
    image: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=${PGDATABASE}
      - POSTGRES_USER=${PGUSER}
      - POSTGRES_PASSWORD=${PGPASSWORD}
    volumes:
      - pg_data:/var/lib/postgresql/data

  backend:
    container_name: backend
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
      - static_volume:/app/backend/static
      - media_volume:/app/backend/media
    ports:
      - "8000:8000"
    depends_on:
      - db

  frontend:
    container_name: frontend
    build:
      context: ./frontend
      dockerfile: Dockerfile
    environment:
      - IS_DOCKER=true
      - WATCHPACK_POLLING=true
    ports:
      - "3000:3000"
    volumes:
      - .:/app
      - node_modules:/app/frontend/node_modules
      - static_volume:/app/frontend/public/static
    depends_on:
      - db
      - backend

  nginx:
    container_name: nginx
    working_dir: /app
    image: nginx:stable-alpine
    restart: always
    ports:
      - "80:80"
    volumes:
      - static_volume:/app/frontend/public/static
      - media_volume:/app/backend/media
      - ./nginx:/etc/nginx/conf.d
    depends_on:
      - frontend
      - backend

volumes:
  pg_data:
  node_modules:
  static_volume:
  media_volume:

字符串

rnmwe5a2

rnmwe5a21#

两个容器不能使用localhost [*]进行通信,因为localhost表示“此容器”。如果你想让你的frontend容器访问backend容器,它应该使用主机名backend ...,如果你想让backend容器访问db容器,它应该使用主机名db(等等)。

  • 实际上,您可以通过将network_mode选项设置为service:<server_name>来配置一个容器,使其与另一个容器运行在同一个network namespace中,但通常不需要这样做。

相关问题