0

我正在使用作为 docker 映像分发的工具(gatk),并尝试在 shell 脚本中使用它的命令。我以分离模式运行 docker。

sudo docker run --name my_container -d -v ~/test:/gatk/data -it broadinstitute/gatk:4.1.9.0

然后我从 shell 脚本运行命令

#!/bin/bash
docker exec my_container gatk command1
wait
docker exec my_container gatk command2

command2 需要来自 command1 的输入,所以我使用等待,但在命令 1 完成之前仍然执行 command2。我也试过

#!/bin/bash
docker exec my_container gatk command1
docker wait my_container
docker exec my_container gatk command2

但是在 command1 完成后脚本不会继续运行。

4

2 回答 2

0

您可以一次运行这两个命令:

docker run image /bin/bash -c "gatk command1 && gatk command2"
于 2021-07-18T09:31:21.187 回答
0

我设法解决了。问题是当我运行 docker exec 时,我没有定义它来接收来自 shell 的输入。将 -i 标志添加到 docker exec 解决了这个问题。这是完整的解决方案。

我以分离模式启动 docker

sudo docker run --name my_container -d -v ~/test:/gatk/data -it broadinstitute/gatk:4.1.9.0

现在我可以关闭终端,docker 容器启动并运行,我可以在新终端中使用它。我使用以下代码生成了一个名为 myscript.sh 的 bash 脚本。

#!/bin/bash
docker exec -i my_container gatk command1
wait
docker exec -i my_container gatk command2

我运行脚本,拒绝它并关闭终端。

./myscript.sh&disown;exit
于 2021-07-18T14:51:32.310 回答