运行 Docker 容器中的脚本,接受 -e 参数

Running a script in Docker container by accepting -e parameter

我有一个非常简单的脚本,叫做 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 Error response from daemon: Container test is not running

这意味着这个最简单的程序没有作为容器执行。 我想不通。

容器运行,执行脚本,然后退出。一个容器只有 运行 与其主进程一样长。当它停止时,容器停止。

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

#!/bin/bash
echo $TEST

我会更改您的 Dockerfile 以复制文件并删除 CMD 指令的 "bash" 部分:

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

现在重建 运行:

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

容器应回显测试变量的值并退出。 (我还没有测试过任何一个,所以对任何错误表示歉意)。

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

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

到运行脚本只用 docker 运行 -d --name [--privileged] -p : \ - v /script.sh:/tmp/script.sh \

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

感谢所有尝试解决问题的人