我正在尝试在docker exec中执行两个命令。具体来说,我必须在特定目录中运行命令。我试过了,但是没用:
docker exec [id] -c 'cd /var/www/project && composer install'
-c
未检测到参数。我也尝试过这个:
docker exec [id] cd /var/www/project && composer install
但是该命令composer install
在docker exec
命令之后执行。我该怎么做?
在第一个示例中,您将-c
标志赋予docker exec
。这是一个简单的答案:docker exec
没有-c
标志。
在您的第二个示例中,您的shell将其解析为两个命令,甚至在Docker看到它之前。等效于:
if docker exec [id] cd /var/www/project
then
composer install
fi
首先,docker exec
运行,如果退出0(成功),composer install
它将尝试在Docker外部本地运行。
您需要做的是将两个命令作为一个参数传递给docker exec
使用字符串。这样,只有在容器内部时,shell才能解释它们。
docker exec [id] "cd /var/www/project && composer install"
但是,正如您在评论中指出的那样,这也不起作用。那是因为cd
它是内置的Shell,并且不存在。尝试将其作为初始命令执行将失败。因此,下一步是将其交给shell执行。
docker exec [id] "bash -c 'cd /var/www/project && composer install'"
最后,在这一点上,它&&
已经移入了一组内部引号,因此我们实际上并不需要在bash
命令周围加上引号...如果愿意,可以将其删除。
docker exec [id] bash -c 'cd /var/www/project && composer install'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句