Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用docker Run在任何给定文件上运行带参数的shell脚本_Bash_Shell_Docker - Fatal编程技术网

Bash 使用docker Run在任何给定文件上运行带参数的shell脚本

Bash 使用docker Run在任何给定文件上运行带参数的shell脚本,bash,shell,docker,Bash,Shell,Docker,我是码头工人的初学者。我用它运行了一个带有docker run的shell脚本,效果很好。然而,我正在尝试将shell脚本应用于当前工作目录中的文件,Dockerfile和脚本位于该目录中 My shell脚本-给定一个文件作为参数,返回其名称和行数: #!/bin/bash echo $1 wc -l $1 Dockerfile: FROM ubuntu COPY ./file.sh / CMD /bin/bash file.sh 然后构建并运行: docker build -t test

我是码头工人的初学者。我用它运行了一个带有docker run的shell脚本,效果很好。然而,我正在尝试将shell脚本应用于当前工作目录中的文件,Dockerfile和脚本位于该目录中

My shell脚本-给定一个文件作为参数,返回其名称和行数:

#!/bin/bash
echo $1
wc -l $1
Dockerfile:

FROM ubuntu
COPY ./file.sh /
CMD /bin/bash file.sh
然后构建并运行:

docker build -t test .
docker run -ti test /file.sh text_file
这就是我得到的:

text_file
wc: text_file: No such file or directory
我不知道为什么第二行不起作用,为什么找不到文件。我不想将文本文件复制到容器中。理想情况下,我希望在当前工作目录中的任何文件上从docker容器运行脚本。 任何帮助都将不胜感激。
谢谢

您正在构建包含脚本
/file.sh
的Docker映像。但是,Docker容器不包含(或不知道)作为参数传递的文件
text\u file

为了让Docker容器知道它,您必须在运行容器时使用它

docker run --rm -it -v "$PWD"/text_file:/text_file test /file.sh /text_file
为了检查其他文件,您只需在mount和参数中交换
text\u file

笔记 除此之外,我可能会建议一些更多的改进来提升你的形象

  • 为了运行脚本,您不必使用
    ubuntu
    作为基本映像。你可能会感觉很好,甚至更加专注。不要忘记使用标签,以便随着时间的推移强制执行完全相同的行为
  • 您可以将脚本设置为Dockerfile的一部分。然后,只需将脚本名称(在这种情况下为text_文件)指定为命令
  • 装载文件时,可以更改容器中文件的名称。因此,您可以简化脚本,并在每次运行容器时将文件装载到完全相同的位置进行测试
  • 那么

    我会做好的

    FROM alpine:3.10
    
    WORKDIR /tmp
    
    COPY file.sh /usr/local/bin/wordcount
    
    ENTRYPOINT /usr/local/bin/wordcount
    
    CMD file
    
    docker run --rm -it -v "PWD"/text_file:/tmp/file test