Compose: Erro durante o backup do banco de dados via cronjob

Criado em 1 mar. 2018  ·  3Comentários  ·  Fonte: docker/compose

Eu tenho o seguinte docker-compose:

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

Posso fazer backup de meus bancos de dados usando este comando:
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
Isso funciona bem.

Eu adicionei a mesma linha de código ao meu crontable, mas então recebo o seguinte erro:

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

Qual é o meu erro?
Obrigado!

kinquestion

Comentários muito úteis

Seu script está falhando porque cron não aloca um TTY, que docker-compose exec espera por padrão. Adicionar a sinalização -T ao seu comando deve remediar isso:
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

Todos 3 comentários

Seu script está falhando porque cron não aloca um TTY, que docker-compose exec espera por padrão. Adicionar a sinalização -T ao seu comando deve remediar isso:
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

Obrigado, isso consertou! =)

Ele corrige com certeza, mas eu diria que o compose poderia lidar com esse erro um pouco melhor, terminando em uma exceção com "ValueError: o descritor do arquivo não pode ser um número inteiro negativo (-1)" não é exatamente descritivo, eu teria capturado a exceção e imprimir um erro mais significativo.

Esta página foi útil?
0 / 5 - 0 avaliações