繁体   English   中英

Docker 在不自动退出容器的情况下运行以在mount中执行脚本?

[英]Docker run to execute script in mount without exiting container automatically?

我在已安装文件夹的根目录中有一个简单的 bash 脚本“test.sh”:

#!/bin/bash
Rscript -e "source('/home/rstudio/mount-folder/src/controller.R')";

但是,当我尝试挂载文件夹并使用 docker 启动容器时,运行如下:

docker run -d -p 8000:8787 -e ROOT=true -e DISABLE_AUTH=true --name container -v mount-folder/:/home/rstudio/ image_name /home/rstudio/test.sh

上面的运行命令启动容器但自动退出。

我正在寻找启动容器的 docker 运行命令,安装文件夹然后执行安装文件夹中的 bash 脚本而不退出容器。

(** 不想使用 go 和 docker exec 命令,因为其他原因它不适合我的用例)

Dockerfile:

FROM rocker/rstudio:4.0.2

//some RUN commands to install necessary r packages

EXPOSE 8787

CMD tail -f /dev/null

其他详情:

  1. 我正在使用的图像是来自 rocker 的 rstudio 服务器,容器在 AWS ubuntu 机器上运行。

编辑:

  1. 还尝试按照http://bigdatums.net/2017/11/07/how-to-keep-docker-containers-running/中的建议在 dockerfile 的末尾添加 CMD tail -f /dev/null/ 即便如此容器出口。

Docker 容器在分离模式下运行时自动关闭。 我认为这篇文章提出了一个很好的解决方案:

http://bigdatums.net/2017/11/07/how-to-keep-docker-containers-running/

您可以将tail -f /dev/null添加为 bash 脚本中的最后一个命令,这样脚本将永远不会停止,除非它被告知这样做。

当您执行docker run [options] image_name [cmd]时,您指定的命令将成为容器的命令并替换 dockerfile 中指定的任何命令(这就是添加CMD tail -f /dev/null不执行任何操作的原因)。 如果你在最后没有/home/rstudio/test.sh的情况下运行你的容器,它应该保持运行。

解决方案是更新您的脚本以在末尾添加tail命令。

#!/bin/bash
Rscript -e "source('/home/rstudio/mount-folder/src/controller.R')";
exec tail -f /dev/null

如果您无法更新该脚本,则可以将其添加到传递给容器的命令中,例如: docker run [options] image_name bash -c '/home/rstudio/test.sh && exec tail -f /dev/null'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM