Compose: Erreur lors de la sauvegarde de la base de données via cronjob

Créé le 1 mars 2018  ·  3Commentaires  ·  Source: docker/compose

J'ai suivant docker-compose:

  db:
    image: mariadb
    environment:
        MYSQL_ROOT_PASSWORD: mysecretpass
    restart: always

Je peux sauvegarder mes bases de données en utilisant cette commande:
cd /opt/docker_data/ && /usr/local/bin/docker-compose exec db sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /opt/backup.sql
Cela fonctionne très bien.

J'ai ajouté la même ligne de code à mon crontable, mais j'arrive à l'erreur suivante:

Traceback (most recent call last):
  File "bin/docker-compose", line 6, in <module>
  File "compose/cli/main.py", line 71, in main
  File "compose/cli/main.py", line 124, in perform_command
  File "compose/cli/main.py", line 467, in exec_command
  File "site-packages/dockerpty/pty.py", line 338, in start
  File "site-packages/dockerpty/io.py", line 32, in set_blocking
ValueError: file descriptor cannot be a negative integer (-1)
Failed to execute script docker-compose

Quelle est mon erreur?
Merci!

kinquestion

Commentaire le plus utile

Votre script échoue car cron n'alloue pas de TTY, ce que docker-compose exec attend par défaut. L'ajout du drapeau -T à votre commande devrait remédier à cela:
cd /opt/docker_data/ && /usr/local/bin/docker-compose exec -T db sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /opt/backup.sql

Tous les 3 commentaires

Votre script échoue car cron n'alloue pas de TTY, ce que docker-compose exec attend par défaut. L'ajout du drapeau -T à votre commande devrait remédier à cela:
cd /opt/docker_data/ && /usr/local/bin/docker-compose exec -T db sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /opt/backup.sql

Merci, cela a réglé le problème! =)

Cela corrige bien sûr, mais je dirais que compose pourrait gérer cette erreur légèrement mieux, se terminant par une exception avec "ValueError: le descripteur de fichier ne peut pas être un entier négatif (-1)" n'est pas exactement descriptif, j'aurais attrapé l'exception et imprimez une erreur plus significative.

Cette page vous a été utile?
0 / 5 - 0 notes