从bash脚本启动docker容器并对其执行命令

时间:2017-10-09 16:31:20

标签: bash docker

我在使用Docker容器运行Fenics时遇到问题:

背景是:一个主要VM通过REST API与用户通信,并获取一个或多个要在Fenics中计算的任务。 Fenics在docker容器上运行。现在,主VM必须使用脚本编排不同的工作虚拟机。

示例:用户希望使用参数集x和y计算网格A和B.为此,可以使用两个worker-VM,它们安装了Fenics容器。如何使用bash脚本启动docker容器并将参数传递给它?

在第一次尝试中,我甚至无法使用脚本访问我自己计算机上创建的容器,因为容器会立即退出。

#!/bin/bash

clear
docker run -dit -v $(pwd):/home/fenics/shared -w /home/fenics/shared quay.io/fenicsproject/stable:curre$

OUTPUT=$(docker ps -q | grep "$name")
echo $OUTPUT
docker exec -dit $OUTPUT /bin/bash
docker exec -dit $OUTPUT echo "Hallo"
docker exec -dit $OUTPUT mkdir test
docker exec -dit $OUTPUT echo "Ciao"

如果我查看docker ps -a,我只能看到已退出的容器。

因此出现了两个问题:首先,这是适当传递命令的方式,其次,我如何保持容器运行?

可能很明显,我以前没有使用docker的经验,因此感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

最有可能的是,您要将命令放入文件commands.sh然后运行docker run --rm -v $(pwd):/home/fenics/shared -w /home/fenics/share --entrypoint bash quay.io/fenicsproject/stable:current commands.sh

这将是共享你的文件夹,启动fenics容器,并在该容器内执行shell脚本(可能,你的输出将写入共享驱动器中的文件)。 --rm部分将在运行后清理容器。

我实际上并不知道fenics是什么 - 如果存在某种状态或初始化,请确保您在commands.sh文件中处理它,因为覆盖入口点将阻止任何花哨的init脚本他们提供跑步。或者,他们的docker image repo可以解释如何将自定义脚本提供给容器。