docker执行bash命令扩展不通过所有位置params

在我最近开始的cron docker容器上,我有一个非常奇怪的行为。

这是我们的db-dump.sh脚本,它只是调用另一个容器中的脚本,并将所有不同的parameter passing给它。

 #!/bin/bash docker exec docker_cli_1 bash -c "/var/www/console db:dump $@" 

触发器是从一个crontab脚本看起来像这样:

 SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOME=/home/lb-user #min hour day month weekday user command 1 0 * * * lb-user /var/lb-cron/commands/dumps-databases/db-dump.sh --dump-type midnight --encrypt --store >> /var/log/cron.log 2>&1 1 1-23 * * * lb-user /var/lb-cron/commands/dumps-databases/db-dump.sh --dump-type additional --encrypt --store --help >> /var/log/cron.log 2>&1 

过去工作得很好,然后最近我们开始越来越奇怪的行为,转储电话不再encryption,也不存储在S3上。

我挖了一遍,最终发现只有第一个位置参数被发送到控制台帮助程序,即使我们在docker_cli_1容器上使用了$@

通过将脚本db-dump.sh脚本更改为

 #!/bin/bash docker exec docker_cli_1 /var/www/console db:dump $@ 

现在它正确扩展。 我们可以在任何地方使用这种方法,但是我们非常担心它为什么会突然这样做。 我们似乎无法find任何可能的理由,或者使得它可以像预期的那样工作。

谁能告诉我为什么这样做?


附加信息。 我们的cron映像使用ubuntu 16.04,并使用apt来安装cron。

 FROM ubuntu:16.04 RUN apt-get install cron 

还有更多的事情,但除此之外Dockerfile没有任何影响这个…我想…