zap*_*ppy 65 bash shell docker
我是Docker技术的新手,我正在尝试创建一个用于设置docker容器的shell脚本,我的脚本文件如下所示
#!bin/bash
docker run -t -i -p 5902:5902 --name "mycontainer" --privileged myImage:new /bin/bash
Run Code Online (Sandbox Code Playgroud)
运行此脚本文件将在新调用的bash中运行容器.
现在我需要运行一个脚本文件(test.sh),该文件已经在上面给出的shell脚本的容器内了.(例如:cd /path/to/test.sh&& ./test.sh)如何做到这一点,请随便问一下情景是否不清楚.
Jav*_*oso 88
您可以使用运行的容器运行一个命令docker exec [OPTIONS] CONTAINER COMMAND [ARG...]:
docker exec mycontainer /path/to/test.sh
Run Code Online (Sandbox Code Playgroud)
并从bash会话运行:
docker exec -it mycontainer /bin/bash
Run Code Online (Sandbox Code Playgroud)
从那里你可以运行你的脚本或其他任何东西.
Rag*_*ngh 79
假设您的docker容器已启动并运行,您可以运行以下命令:
docker exec mycontainer /bin/sh -c "cmd1;cmd2;...;cmdn"
Run Code Online (Sandbox Code Playgroud)
小智 10
我正在寻找同一个问题的答案,并在我的Dockerfile解决方案中找到了ENTRYPOINT.
Dockerfile
...
ENTRYPOINT /my-script.sh ; /my-script2.sh ; /bin/bash
Run Code Online (Sandbox Code Playgroud)
现在,当我启动容器时执行脚本,并在脚本执行后得到bash提示符.
小智 10
这个命令对我有用
cat local_file.sh | docker exec -i container_name bash
Run Code Online (Sandbox Code Playgroud)
Gan*_*ala 10
Thomio 的答案很有帮助,但它希望脚本存在于图像内部。如果您有一个要在容器内运行/测试的脚本之一(从命令行或在脚本中有用),那么您可以使用
$ docker run ubuntu:bionic /bin/bash -c '
echo "Hello there"
echo "this could be a long script"
'
Run Code Online (Sandbox Code Playgroud)
您还可以将本地目录挂载到 docker 映像中,并在.bashrc. 不要忘记脚本必须由函数组成,除非您希望它在每个新 shell 上执行。(这是过时的,请参阅更新通知。)
我正在使用此解决方案来更新 docker 实例之外的脚本。这样我就不必在发生更改时重新运行图像,我只需打开一个新外壳。(摆脱了重新打开外壳 - 请参阅更新通知)
以下是绑定当前目录的方法:
docker run -it -v $PWD:/scripts $my_docker_build /bin/bash
Run Code Online (Sandbox Code Playgroud)
现在您的当前目录绑定到/scripts您的 docker 实例。
(过时)要保存.bashrc更改,请使用以下命令提交工作映像:
docker commit $container_id $my_docker_build
Run Code Online (Sandbox Code Playgroud)
为了解决为每次更改打开一个新 shell 的问题,我现在执行以下操作:
在 dockerfile 本身中,我添加了RUN echo "/scripts/bashrc" > /root/.bashrc". 在里面,zshrc我将脚本目录导出到路径。脚本目录现在包含多个文件而不是一个。现在我可以直接调用所有脚本,而无需在每次更改时打开子 shell。
顺便说一句,您也可以在容器之外定义历史文件。这样就不再需要提交 bash 更改了。
如果您不想要(或拥有)正在运行的容器,您可以直接使用该run命令调用您的脚本。
删除迭代 tty-i -t参数并使用:
$ docker run ubuntu:bionic /bin/bash /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)
这将(未测试)也适用于其他脚本:
$ docker run ubuntu:bionic /usr/bin/python /path/to/script.py
Run Code Online (Sandbox Code Playgroud)