如果未在根目录下运行,Docker cronjob权限不正确

如果未在根目录下运行,Docker cronjob权限不正确,docker,docker-compose,Docker,Docker Compose,我有一个运行Apache的docker容器。这是从根用户下的docker compose开始的。在此容器中,de-webserver在默认用户www数据下运行。通过conjob,我触发用于上传图像的php脚本。如果cronjob在根目录下运行,那么这种方法可以正常工作。但是我想让conjob在www数据下运行,这样上传的文件与直接通过apache上传的文件拥有相同的所有者 我使用以下cronjob(这很有效): 但是当我将cronjob用户更改为www数据时(不再触发): 在最后一个cronjo

我有一个运行Apache的docker容器。这是从根用户下的docker compose开始的。在此容器中,de-webserver在默认用户www数据下运行。通过conjob,我触发用于上传图像的php脚本。如果cronjob在根目录下运行,那么这种方法可以正常工作。但是我想让conjob在www数据下运行,这样上传的文件与直接通过apache上传的文件拥有相同的所有者

我使用以下cronjob(这很有效):

但是当我将cronjob用户更改为www数据时(不再触发):


在最后一个cronjob中,容器中的php脚本不再被触发。我相信这与权限设置有关

如果您在登录根用户帐户时尝试以用户身份运行命令,则您的命令应为:

su www-data; docker exec apache_1 php /var/www/import

否则,您需要切换到www数据用户(sudosu www data),然后编辑该用户的cron作业(crontab-e)。每个用户都有自己的cronjobs。

如果希望容器内的www数据执行
import
命令,请将其指定给docker:

*/1 * * * * docker exec --user www-data apache_1 php /var/www/import

根据您的尝试,用户www数据没有运行docker命令的权限。而且,您没有在
crontab-e
中指定用户名的选项(您尝试在/etc/crontab中指定用户名,或者使用su/sudo)。

sudo组添加dockerThe
php
仍将以root用户身份运行,默认情况下docker执行此操作我选中了,但它不起作用。实际上,它们一直在根帐户下运行。任何其他可能的解决方案?请尝试crontab-u www-data-ealso,并确保在cronjob启动时运行su www-data(它将登录用户从root切换到www-data)。它可能需要放在cron运行的bash脚本中。
su www-data; docker exec apache_1 php /var/www/import
*/1 * * * * docker exec --user www-data apache_1 php /var/www/import