«Не удалось перевести имя хоста« postgres »в адрес: имя или служба не известны» с Postgres в docker-compose

Я пытаюсь, чтобы один контейнер докеров общался с Postgres в другом контейнере, используя композицию докеров.

Вот мой компоновочный файл:

version: '2'
services:
  web:
    restart: always
    build: cloudpebble/
    ports:
      - "8090:8090"
    volumes:
      - "./cloudpebble/:/code"
    links:
      - redis
      - postgres:postgres
      - s3
      - qemu
      - ycmd
    depends_on:
      - postgres
    environment:
      - DEBUG = "yes"
      - RUN_WEB = "yes"
      - AWS_ENABLED = "yes"
      - PORT=8090
      - AWS_S3_FAKE_S3=10.0.0.4:8003
      - MEDIA_URL=http://10.0.0.4:8003/builds.cloudpebble.net/
      - QEMU_URLS=http://10.0.0.4:8001/
      - YCM_URLS=http://10.0.0.4:8002/
      - PUBLIC_URL=http://10.0.0.4:8090/
      - LIBPEBBLE_PROXY=wss://cloudpebble-ws.herokuapp.com/tool
      - PEBBLE_AUTH_URL=https://auth.rebble.io
    networks:
      - dbnet
  celery:
    build: cloudpebble/
    volumes:
      - "./cloudpebble/:/code"
    links:
      - redis
      - postgres
      - s3
    environment:
      - DEBUG = "yes"
      - RUN_CELERY = "yes"
      - AWS_ENABLED=yes
      - EXPORT_ROOT=http://10.0.0.4/export.cloudpebble.net/
      - AWS_S3_FAKE_S3=10.0.0.4:8003
  qemu:
    build: cloudpebble-qemu-controller/
    volumes:
      - "./cloudpebble-qemu-controller/:/code"
    ports:
      - "8001:80"
  ycmd:
    build: cloudpebble-ycmd-proxy/
    volumes:
      - "./cloudpebble-ycmd-proxy/:/code"
    ports:
      - "8002:80"
  redis:
    image: redis
  postgres:
    image: postgres
    ports:
      - "5432:5432"
    networks:
      - dbnet
    container_name: postgres
  s3:
    image: kuracloud/fake-s3
    ports:
      - "8003:4569"
networks:
  default:
    name: pebble
  dbnet:
    driver: bridge

Проблема в том, что хотя обе сети созданы, «веб-контейнер» не видит Postgres и выдает эту ошибку: could not translate host name "postgres" to address: Name or service not known

Спасибо!

Я пробовал следующее:

  • Обновление до версии 2
  • Использование отдельной сети
  • Использование ссылок
  • Сначала запустите Postgres, затем запустите web
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть две отдельные сети, но в этом нет необходимости. Контейнер базы данных изолирован сам по себе dbnet, но ни один из других контейнеров не изолирован. Для подключения двух контейнеров либо ни один контейнер не может иметь блок networks:, либо оба имеют и содержат хотя бы одно общее сетевое имя, либо только один имеет, но явно содержит default.

Самое простое решение здесь — просто использовать предоставленную Compose сеть default для всего. Удалите все блоки networks: во всем файле. Параметры links: устарели, а активируемый ими архаичный сетевой режим может иногда вызывать проблемы; удалите их (или, возможно, измените их на `depends_on:).

Хорошо, сделал это. Тем не менее, я все еще получаю ту же ошибку. На этот раз он сказал, что создал сеть по умолчанию. Я также изменил все ссылки на depend_on.

blockarchitech 17.04.2023 00:56

Ах! Только что исправил это. Оказывается, переменная среды для пароля БД не устанавливалась должным образом. Спасибо!

blockarchitech 17.04.2023 01:01

Другие вопросы по теме