Задать вопрос
@Kostik_1993
Web Developer

Из-за чего может происходить данная ошибка Postgress в DockerCompose?

Часто вылазит ошибка из-за того что postgres отваливается SQLSTATE[08006] [7] could not translate host name "postgres" to address: Temporary failure in name resolution

Решается просто выполнением docker-compose up -d, но почему не работает автоматически не могу додуматься, так как пока не гуру докера. Например нужно было перезагрузить комп, презагрузил, все контейнеры запустились, а postgress нет. Пришлось в ручную делать docker-compose up -d

docker-compose.yml

version: '3'
services:

  #PHP Service
  app:
    build:
      args:
        user: ubuntu
        uid: 1000
      context: .
      dockerfile: docker/Dockerfile
    image: digitalocean.com/php
    restart: unless-stopped
    tty: true
    working_dir: /var/www
    volumes:
      - ./code:/var/www
      - ./docker/php/local.ini:/usr/local/etc/php/conf.d/local.ini
    links:
      - postgres
    networks:
      - app-network

  #Nginx Service
  webserver:
    image: nginx:alpine
    restart: unless-stopped
    tty: true
    ports:
      - 9680:80
    volumes:
      - ./code:/var/www:cached
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d/
    networks:
      - app-network

  # PostgreSQL database container
  postgres:
    build:
      context: docker/postgres
      dockerfile: Dockerfile
    volumes:
      # Database volume
      - database:/var/lib/postgresql/data
      # Temp volume to allow using dumps
      - ./docker/postgres/dumps/:/tmp/
    ports:
      - 54321:5432
    environment:
      - LC_ALL=C.UTF-8
      - POSTGRES_DB=app
      - POSTGRES_USER=app
      - POSTGRES_PASSWORD=app
    networks:
      - app-network

#Docker Networks
networks:
  app-network:
    driver: bridge
#Volumes
volumes:
  database:
    driver: local

  • Вопрос задан
  • 3996 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@KoreanGuy
ваш compose запускает 3 контейнера в одной подсети (app-network). В этой подсети (и только в ней) имена сервисов (app, webserver, postgres) могут быть использованы вместо их IP. То есть ваш контейнер app может, например, соединяться с бд, используя postgres:5432 в качестве адреса. Но вы не можете, скажем, подключиться к контейнеру postgres по этому имени откуда-то извне подсети.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы