gpt4 book ai didi

bash - 为什么docker-compose需要为exec命令撰写文件?

转载 作者:行者123 更新时间:2023-12-02 19:34:23 25 4
gpt4 key购买 nike

我有一个bash脚本,位于docker-compose.yaml呈现的目录上方。

在bash脚本中有命令:

docker-compose exec ${service} /somescript_inside_container.sh

执行此bash脚本时,我得到:
ERROR: 
Can't find a suitable configuration file in this directory or any
parent. Are you in the right directory?

Supported filenames: docker-compose.yml, docker-compose.yaml

但是当在docker上运行此命令并引用 container_name而不是 service时,例如
docker exec ${container_name} /somescript_inside_container.sh

会的。

对我来说,这不是明显的行为,我很好奇,为什么docker和docker-compose之间有这种区别?

最佳答案

除非您明确指定container_name属性,否则由docker compose创建的docker容器名称具有生成的名称。

因此,如果您不指定撰写文件,则exec命令不知道需要将其执行到哪个容器中。

此外,exec的语法是:

exec [options] SERVICE COMMAND [ARGS...]

因此,您需要指定服务名称,并且可能有多个撰写文件,每个文件都使用相同的服务名称。因此,除非您指定撰写文件,否则docker无法选择需要在其中运行命令的容器。

对于docker exec命令,您将明确指定容器名称。因此不存在歧义。

另一方面,在docker compose中,服务名称通常是配置中有意义的部分,并且由于容器名称是自动生成的,因此明确指定容器名称将需要手动查找此生成的名称,除非您在以下位置指定了compose文件容器是从中创建的,docker compose可以推断出容器名称。

关于bash - 为什么docker-compose需要为exec命令撰写文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47485170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com