gpt4 book ai didi

docker - 如何在不复制的情况下使用本地输入文件在容器中运行命令

转载 作者:行者123 更新时间:2023-12-02 21:11:55 25 4
gpt4 key购买 nike

我是 docker 和容器的新手。我有一个包含 MRI 分析软件的容器。在这个容器中还有许多其他软件,主要软件从中提取命令。我想使用位于外部硬盘驱动器上的研究数据从该容器中的其中一个软件运行单个命令,该外部硬盘驱动器已插入运行 docker 的本地计算机。

我知道有一个 cp 命令可以将文件(例如脚本)复制到容器中,而大多数其他类似的问题似乎都建议将文件从本地计算机复制到容器中,然后运行容器中的脚本(或其他)。在我的例子中,我需要容器从目录结构中的单独文件夹访问数据,并且复制整个目录是不可行的,因为它非常大。

老实说,我只想知道如何使用本地计算机上的输入在 docker 中运行单个命令。我已经运行 docker ps 以获取 CONTAINER_ID,即 d8dbcf705ee7。在研究了容器内的执行命令后,我尝试了以下命令:

docker exec d8dbcf705ee7/bin/bash -c "mcflirt -in/Volumes/DISS/FMRIPREP/sub-S06V1A/func/sub-S06V1A_task-compound_run-01_bold.nii -out sub-S06V1A_task-compound_run-01_bold_mcf_COMMAND_TEST .nii.gz -reffile/Volumes/DISS/FMRIPREP_TMP/sub-S06V1A_dof6_ver1.2.5/fmriprep_wf/single_subject_S06V1A_wf/func_preproc_task_compound_run_01_wf/bold_reference_wf/gen_ref/ref_image.nii.gz -mats -plots”

mcflirt 是我想在容器内运行的命令。我相信 exec 命令会做我希望的事情,因为如果我运行 docker exec d8dbcf705ee7/bin/bash -c "mcflirt" 我会得到 的帮助输出mcflirt 命令,这是这种情况下的预期结果。 /Volume/... 路径中的文件是我想要访问的本地计算机上的文件。我知道文件的位置是问题所在,因为我无法使用 Tab 键完成此命令中的路径;当我运行它时,我得到以下输出:

图像异常:#22::错误:无法打开图像/Volumes/DISS/FMRIPREP/sub-S06V1A/func/sub-S06V1A_task-compound_run-01_bold
在抛出“RBD_COMMON::BaseException”实例后调用终止

谁能指出我正确的方向?

最佳答案

因此,如果我没猜错,您需要执行一些 shell 脚本并提供上下文(如本地文件)。

方法很简单。

假设您的脚本和所有需要的文件都位于主机 PC 的/hello 文件夹中(不管它们是否存储在一起,只是显示技术)。

/hello
- runme.sh
- datafile1
- datafile1

您将此文件夹挂载到您的容器中,以便可以在其中访问文件。如果您不需要需要容器来修改它们,最好以readonly 模式挂载。

你像这样启动 docker:

docker run -it -v /hello:/hello2:ro ubuntu /hello2/runme.sh

就是这样!您的脚本 runme.sh 在容器内执行,并且可以访问附近的文件。感谢 -v/hello:/hello2:ro 指令。它以只读 ro 模式将主机文件夹 /hello 映射到容器文件夹 /hello2

请注意,您可以使用相同的名称,我只是将它们不同以显示差异。

关于docker - 如何在不复制的情况下使用本地输入文件在容器中运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53966707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com