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

我有一个运行Apache的docker集装箱。 这是用root用户下的docker-compose开始的。 在这个容器中,web服务器在默认用户www-data下运行。 通过conjob我触发PHP脚本上传图片。 这工作正常,如果cronjob在根目录下运行。 但是我想要在www-data下运行conjob,所以上传的文件与通过apache直接上传的文件拥有相同的所有者。

我使用下面的cronjob(这个工程):

*/1 * * * * docker exec apache_1 php /var/www/import 

但是当我把cronjob用户更改为www-data(不再触发)时:

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

使用最后一个cronjob,容器内的php脚本不再被触发。 我相信它与权限设置有关?

如果您希望import命令由容器内的www-data执行,请将其指定给docker:

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

用你试过的,用户www-data没有运行docker命令的权限。 而且,你没有这样的选项来在crontab -e指定用户名(你试图做的应该在/ etc / crontab中,或者使用su / sudo)。

如果您尝试以用户身份运行命令,同时login到root用户帐户,则您的命令应为:

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

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