运行 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 获取脚本并在运行时执行。
感谢所有尝试解决问题的人
我有一个非常简单的脚本,叫做 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 获取脚本并在运行时执行。
感谢所有尝试解决问题的人