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!
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.
Commentaire le plus utile
Votre script échoue car
cron
n'alloue pas de TTY, ce quedocker-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