我正在尝试在 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
flag.
在第二个示例中,您的 shell 在 Docker 看到它之前就将其解析为两个命令。它相当于:
if docker exec [id] cd /var/www/project
then
composer install
fi
首先,docker exec
运行,如果退出0(成功),composer install
会尝试运行locally,在 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'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)