@VyacheslavMironov

Какой хост внутри контейнера?

Добрый день, подскажите пожалуйста, у меня есть bash скрипт в файле dump.sh
./dump/dump.sh
#!/bin/bash

export PATH=$PATH:/usr/local/bin

DB_USER="raptor"
DB_PASS="lama22"
DB_NAME="jalur_db"
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
OUTPUT_FILE="$DATE-$DB_NAME.sql"

pg_dump -E UTF-8 -U $DB_USER -d $DB_NAME -h db --data-only -f /var/www/dump/$OUTPUT_FILE

if [ $? -eq 0 ]; then
    echo "Дамп базы данных успешно создан: $OUTPUT_FILE"
else
    echo "Ошибка при создании дампа базы данных"
fi


Есть контейнер с постгресом:
# ./docker/db.Dockerfile
FROM postgres:13.13-alpine3.19
WORKDIR /var/lib/postgresql/data

CMD ["/bin/sh", "-c", "/var/www/dump/dump.sh"]


И имеется docker-compose файл:
# ./docker-compose.yml
version: "3.8"
services:
  server:
    ports:
      - 80:80
    restart: always
    build:
      context: docker
      dockerfile: server.Dockerfile
    volumes:
      - ./configuration/nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - ./src:/var/www/src
  # TODO: Сделать автоматическое резервное копирование БД в конце каждого дня по UTC 0+
  db:
    ports:
      - 5432:5432
    restart: always
    build:
      context: docker
      dockerfile: db.Dockerfile
    env_file:
      - configuration/db.env
    volumes:
      - .:/docker-entrypoint-initdb.d
      - ./dump:/var/www/dump
      - dbdata:/var/lib/postgresql/data
  
  app:
    restart: always
    build:
      context: docker
      dockerfile: app.Dockerfile
    env_file:
      - configuration/xdebug.env
    volumes:
      - ./src:/var/www/src
      - ./configuration/php.ini:/usr/local/etc/php/php.ini:ro
  
  composer:
    build:
      context: docker
      dockerfile: composer.Dockerfile
    volumes:
      - ./src:/var/www/src
  
  view:
    build:
      context: docker
      dockerfile: view.Dockerfile
    volumes:
      - ./src:/var/www/src
    
  artisan:
    build:
      context: docker
      dockerfile: app.Dockerfile
    volumes:
      - ./src:/var/www/src
    entrypoint: ["php", "/var/www/src/artisan"]

volumes:
  dbdata:
    driver: local

Пытаюсь сделать резервную копию базы данных bash скриптом. Но столкнулся с проблемой соединния с постгресом.
Ошибка:
pg_dump: error: connection to database "jalur_db" failed: could not connect to server: Connection refused
Is the server running on host "db" (172.19.0.2) and accepting
TCP/IP connections on port 5432?
В строку скрипта ставил localhost, 127.0.0.1, имя сервиса (db) из docker-compose.yml

Не пойму какой тут должен быть хост? ведь явно на него ругается.
  • Вопрос задан
  • 1209 просмотров
Пригласить эксперта
Ответы на вопрос 3
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
Поменяв CMD в db.dockerfile, вы вместо СУБД запускаете шелл-скрипт.
Ответ написан
Комментировать
AshBlade
@AshBlade
Просто хочу быть счастливым
Попробуй указать имя хоста контейнера напрямую через hostname

db:
    ports:
      - 5432:5432
    hostname: 'db'
    restart: always
    build:
      context: docker
      dockerfile: db.Dockerfile
    env_file:
      - configuration/db.env
    volumes:
      - .:/docker-entrypoint-initdb.d
      - ./dump:/var/www/dump
      - dbdata:/var/lib/postgresql/data
Ответ написан
Комментировать
@s1dney
ну во-первых да, там сам докер файл похоже сломанный, так как он вместо PSQL запускает скрипт дампа, может поэтому там и постгреса нет по адресу? он запущен вообще?
а во-вторых, я бы запускал дамп на хосте, а не внутри контейнера, либо поднять еще 1 контейнер рядом который делает бекап и умирает. Дергать его можно командой docker-compose backup start по крону, либо докер-контейнер с Кроном (так же - отдельный от постгреса)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы