Почему docker-контейнеры не стартуют автоматически после перезагрузки сервера?

Добрый день! <br/> У нас есть файл docker-compose.yml со следующим содержимым: <br/> <pre><code>root@mail:~/pgweb# cat docker-compose.yml
services:
  pgbackweb:
    image: eduardolat/pgbackweb:latest
    restart: unless-stopped
    ports:
      - "8085:8085" # Access the web interface at http://localhost:8085
    volumes:
      - ./backups:/backups # If you only use S3 destinations, you don't need this volume
    environment:
      PBW_ENCRYPTION_KEY: "my_secret_key" # Change this to a strong key
      PBW_POSTGRES_CONN_STRING: "postgresql://postgres:password@postgres:5432/pgbackweb?sslmode=disable"
      TZ: "America/Guatemala" # Set your timezone, optional
    depends_on:
      postgres:
        condition: service_healthy

  postgres:
    image: postgres:16
    environment:
      POSTGRES_USER: postgres
      POSTGRES_DB: pgbackweb
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"
    volumes:
      - ./data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5</code></pre> <br/> После выполнения команды <br/> root@mail:~/pgweb# docker compose up -d <br/> вывод показывает, что оба контейнера успешно запустились: <br/> [+] Running 2/2 <br/> ✔ Container pgweb-postgres-1   Healthy                                                                                             5.8s <br/> ✔ Container pgweb-pgbackweb-1  Started <br/> В данный момент моя задача состоит в том, чтобы контейнеры автоматически запускались при перезагрузке сервера. Я добавил в файл docker-compose.yml строку <br/> restart: always <br/> <pre><code>services:
  pgbackweb:
    image: eduardolat/pgbackweb:latest
    restart: always
    ports:
      - "8085:8085" # Access the web interface at 
  • 19 декабря 2024 г. 11:53
Ответы на вопрос 2
Docker-контейнеры могут не запускаться автоматически после перезагрузки сервера по нескольким причинам, даже если вы настроили параметр `restart` в `docker-compose.yml`. Давайте рассмотрим основные моменты:

1. **Параметр `restart`**: Вы указали `restart: always` или `restart: unless-stopped`. Эти параметры должны гарантировать, что контейнеры будут перезапущены после перезагрузки. Убедитесь, что вы правильно применили эти параметры ко всем нужным сервисам.

2. **Запуск Docker-демона**: Проверьте, что Docker-демон автоматически запускается при загрузке системы. Это можно проверить с помощью команды:
   ```bash
   systemctl is-enabled docker
   ```
   Если статус не показывает, что он включен, можете выполнить:
   ```bash
   sudo systemctl enable docker
   ```

3. **Docker Compose**: Если использовать `docker-compose`, убедитесь, что вы используете правильную версию Docker Compose, которая поддерживает нужные вам функции.

4. **Проверьте состояние контейнеров**: После перезагрузки сервера выполните команду `docker ps -a`, чтобы увидеть, запустились ли контейнеры и в каком они состоянии. Если контейнеры не запустились, посмотрите логи командой `docker logs <container_id>` для диагностики проблемы.

5. **Конфигурация системы**: Некоторые системы могут иметь специальные службы или механизмы, которые могут прерывать выполнение контейнеров или ограничивать их запуск. Проверьте системные журналы (например, `journalctl`) на наличие сообщений об ошибках, связанных с Docker.

6. **Проблемы с зависимостями и состоянием**: Если `depends_on` настроено на `postgres`, и `postgres` не был готов в момент попытки запуска `pgbackweb`, это может привести к сбоям. Убедитесь, что `postgres` действительно здоров, когда `pgbackweb` пытается стартовать.

7. **Различия в настройках среды**: Если вы используете окружение, в котором требуются дополнительные настройки, убедитесь, что они корректны (например, переменные окружения, настройки сети).

Если после выполнения всех этих шагов у вас все еще возникают проблемы, возможно, стоит рассмотреть использование системы для управления службами, которая гарантирует правильный порядок и автоматизацию (например, `systemd` или `Supervisor`).
сделал 
root@mail:~/pgweb# cat docker-compose.yml
services:
pgbackweb:
image: eduardolat/pgbackweb:latest
restart: always
ports:
- "8085:8085" # Access the web interface at localhost:8085
volumes:
- ./backups:/backups # If you only use S3 destinations, you don't need this volume
environment:
PBW_ENCRYPTION_KEY: "my_secret_key" # Change this to a strong key
PBW_POSTGRES_CONN_STRING: " postgresql://postgres:password@postgres:5432/pgbac... "
TZ: "America/Guatemala" # Set your timezone, optional
depends_on:
postgres:
condition: service_healthy

postgres:
image: postgres:16
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_DB: pgbackweb
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
volumes:
- ./data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5

затем

docker compose up -d

бутнул сервер и вуаля

docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
pgweb-pgbackweb-1 eduardolat/pgbackweb:latest "task migrate-serve" pgbackweb About a minute ago Up 24 seconds 0.0.0.0:8085->8085/tcp, :::8085->8085/tcp
pgweb-postgres-1 postgres:16 "docker-entrypoint.s…" postgres About a minute ago
Похожие вопросы