我正在尝试使用GNU parallel并行运行一堆docker-compose命令。但是出于某种原因,它似乎在分离模式下启动parallel
强制docker-compose,因此我无法再访问容器输出。
我希望并行只会保持docker-compose附加并在进程完成后按顺序打印输出。
这是我的命令
echo 'tests/test_foo.py' | parallel -X docker-compose --project-name bar run --rm test py.test $*
有没有办法迫使docker-compose
保持联系?
答案 0 :(得分:3)
run
没有分离模式,应始终将日志行打印到终端。这似乎对我来说只有一行输入。
但是,计算容器名称很复杂,因此尝试运行这样的多个实例可能会导致名称冲突错误。您可能需要使用--name
作为run
的选项,为每个设置一个唯一的名称。
您也可以考虑使用pytest-xdist在单个test
容器中并行运行测试。
答案 1 :(得分:1)
继dnephin's answer之后,您可以使用parallel
的位置参数命名每个容器,因此没有命名争用
echo -e "1\ttest1\n2\ttest2\n3\ttest3" | parallel -X --colsep '\t' docker-compose run --name proj{1} web echo {2}
在此演示中,该选项卡用于分隔用于名称的第一个字段和用于命令的第二个字符串。
您需要使用tests/test_foo.py
中的现有字段作为名称,或者如果该文件中的内容不唯一,则需要添加此附加信息。