2017-11-25 93 views
1

我有一个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 

它会工作。

对我来说这不是明显的行为,我很好奇为什么码头工和码头工合成的这种差异?

+0

这2个命令应该表现相同。是否有机会遇到与此类似的https://github.com/docker/for-mac/issues/1012? 此外,请尝试明确指定docker-compose文件以查看是否有帮助 'docker-compose -f $ {file_path} exec $ {service} /somescript_inside_container.sh' –

回答

1

由码头工人创建的码头容器名称具有生成的名称,除非您指定container_name属性明确性。

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

此外,EXEC语法是:

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

因此,你需要指定服务名称,你可能让每个使用相同的服务名称的多个撰写文件。因此,除非您指定撰写文件,否则docker无法选择需要将命令运行到的容器。

对于docker exec命令,您显式指定容器名称。因此没有歧义。另一方面,在docker compose中,服务名称通常是配置的有意义的部分,并且由于容器名称是自动生成的,显式指定容器名称将需要手动查找此生成的名称,除非您指定撰写创建容器的文件和docker撰写可以推断出容器名称。

相关问题