首页 > 解决方案 > 如何从 bash 脚本启动 docker 容器?

问题描述

我一直无法找到任何令人满意的答案。我有一个简单的脚本,我希望在守护进程模式下运行多个容器:

#!/usr/bin/env bash

docker run -d -it -v /mnt/DataResearch/DataStageData/ed_provider_notes/:/data -v /home/gsilver1/data/QuickUMLS/data/:/data/UMLS ahc-nlpie-docker.artifactory.umn.edu/qumls:1 /home/QuickUMLS/run.sh

docker run -d -it -v /mnt/DataResearch/DataStageData/ed_provider_notes/:/data ahc-nlpie-docker.artifactory.umn.edu/b9:1 /usr/share/biomedicus/scripts/run_biomedicus.sh

docker run --env  umlsUser='USER' --env umlsPass='PW' -d -it -v /mnt/DataResearch/DataStageData/ed_provider_notes/:/data ahc-nlpie-docker.artifactory.umn.edu/clmp:4 /usr/share/clamp/scripts/run_clamp.sh

docker run -d -it -v /mnt/DataResearch/gsilver1/note_test/ed_provider_notes/:/data ahc-nlpie-docker.artifactory.umn.edu/mm:4 /usr/share/public_mm/scripts/run_metamap.sh

docker run --env  ctakes_umlsuser='USER' --env ctakes_umlspw='PW' -d -it -v /mnt/DataResearch/DataStageData/ed_provider_notes/:/data ahc-nlpie-docker.artifactory.umn.edu/ctks:1 /usr/share/ctakes/scripts/run_ctakes.sh

从终端执行时,这些命令运行良好。但是,当从脚本运行时,出现以下错误:

(base) gsilver1@d0pconcourse002:~/development/scripts$ ./run_nlp.sh
./run_nlp.sh: line 3: docker run -d -v /mnt/DataResearch/DataStageData/ed_provider_notes/:/data -v /home/gsilver1/data/QuickUMLS/data/:/data/UMLS ahc-nlpie-docker.artifactory.umn.edu/qumls:1 /home/QuickUMLS/run.sh: No such file or directory
./run_nlp.sh: line 5: docker run -d -v /mnt/DataResearch/DataStageData/ed_provider_notes/:/data ahc-nlpie-docker.artifactory.umn.edu/b9:1 /usr/share/biomedicus/scripts/run_biomedicus.sh: No such file or directory
./run_nlp.sh: line 7: docker run --env  umlsUser='horcle' --env umlsPass='nEj123456' -d -v /mnt/DataResearch/DataStageData/ed_provider_notes/:/data ahc-nlpie-docker.artifactory.umn.edu/clmp:4 /usr/share/clamp/scripts/run_clamp.sh: No such file or directory
./run_nlp.sh: line 9: docker run -d -v /mnt/DataResearch/DataStageData/ed_provider_notes/:/data ahc-nlpie-docker.artifactory.umn.edu/mm:4 /usr/share/public_mm/scripts/run_metamap.sh: No such file or directory
./run_nlp.sh: line 11: docker run --env  ctakes_umlsuser='horcle' --env ctakes_umlspw='nEj123456' -d -v /mnt/DataResearch/DataStageData/ed_provider_notes/:/data ahc-nlpie-docker.artifactory.umn.edu/ctks:1 /usr/share/ctakes/scripts/run_ctakes.sh: No such file or directory
(base) gsilver1@d0pconcourse002:~/development/scripts$

这似乎表明脚本没有解释 docker 命令末尾的命令以在 docker 容器的文件系统中运行,而不是从远程文件系统中运行。我尝试在 docker 命令周围加上引号,然后使用 -c 以特定用户身份运行,等等,但都无济于事。如何让命令在每个 docker 的容器中运行,而无需修改 docker 映像的入口点?

标签: bashdocker

解决方案


尝试用引号括起您的路径,有时会导致意外行为。


推荐阅读