通过接受-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获取脚本,像大多数人一样在运行时执行。
感谢所有试图解决查询的人