通过接受-e参数在Docker容器中运行脚本

我有一个非常简单的脚本称为myscript.sh

echo "this is test " > /tmp/myfile.txt echo $TEST >> /tmp/myfile.txt 

我已经将这个脚本存储在我的磁盘中,我打算把它作为下面的卷传递给容器

 docker run -d --name test \ -v /home/docker/test/myscript.sh:/tmp/myscript.sh \ -e TESTING=just-a-test \ test 

Dockerfile如下所示

 FROM ubuntu CMD ["bash", "/tmp/myscript.sh"] 

所以思考的过程是让脚本执行,并得到结果作为文件myfile.txt将包含-e通过。

相反,我越来越

docker @ boot2docker:〜/ test $ docker exec -it test / bin / bash来自守护进程的错误响应:容器testing未运行

这意味着这个最简单的程序不能作为容器执行。 我无法弄清楚。

容器运行,执行脚本,然后退出。 一个容器只能运行其主stream程。 当停止时,容器停止。

一个更简单的testing是将您的testing脚本更改为:

 #!/bin/bash echo $TEST 

我会改变你的Dockerfile复制文件,并删除CMD指令的“bash”部分:

 FROM ubuntu COPY myscript.sh /myscript.sh CMD /myscript.sh 

现在重build并运行:

 $ docker build -t test . ... $ docker run -e TEST=VAL test ... 

容器应该回显testingvariables的值并退出。 (我没有testing过这个,所以对于任何错误都表示歉意)。

这个问题的答案是使用入口点而不是cmd。 我做了一些研究,我想出了这样的解决scheme

 ENTRYPOINT ["bash", "<script>"] 

要运行脚本,只需使用docker run -d -name [–privileged] -p:\ – v /script.sh:/tmp/script.sh \

其中-v <>:您也可以使用WGET获取脚本,像大多数人一样在运行时执行。

感谢所有试图解决查询的人