簡體   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