为什么docker-compose需要为exec命令组合文件?
问题描述:
我有一个bash脚本,位于docker-compose.yaml提供的目录上面。为什么docker-compose需要为exec命令组合文件?
里面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
但随着搬运工运行此命令和引用container_name
而不是service
例如,当
docker exec ${container_name} /somescript_inside_container.sh
它会工作。
对我来说这不是明显的行为,我很好奇为什么码头工和码头工合成的这种差异?
答
由码头工人创建的码头容器名称具有生成的名称,除非您指定container_name
属性明确性。
因此,如果您未指定撰写文件,exec命令不知道需要执行哪个容器。
此外,EXEC语法是:
exec [options] SERVICE COMMAND [ARGS...]
因此,你需要指定服务名称,你可能让每个使用相同的服务名称的多个撰写文件。因此,除非您指定撰写文件,否则docker无法选择需要将命令运行到的容器。
对于docker exec命令,您显式指定容器名称。因此没有歧义。另一方面,在docker compose中,服务名称通常是配置的有意义的部分,并且由于容器名称是自动生成的,显式指定容器名称将需要手动查找此生成的名称,除非您指定撰写创建容器的文件和docker撰写可以推断出容器名称。
这2个命令应该表现相同。是否有机会遇到与此类似的https://github.com/docker/for-mac/issues/1012? 此外,请尝试明确指定docker-compose文件以查看是否有帮助 'docker-compose -f $ {file_path} exec $ {service} /somescript_inside_container.sh' –