在容器化的CLI和主机之间共享文件

时间:2020-04-29 09:59:28

标签: docker containers command-line-interface

我需要对现有的CLI进行容器化,该CLI也可以读取和写入文件。与容器化的cpkubectl任何其他典型的bash命令类似。

是否可以包装docker命令以启用对主机系统上文件的访问?

cat my_wrapper.sh

#!/bin/sh

docker run --rm -it -v ??? \
    $IMAGE \
    "$@"

是否可以像my_wrapper.sh那样挂载my_wrapper.sh --option /some/file/argument可以读写文件的任何内容?

说明

当然,您可以简单地挂载文件所在的路径,但是然后:

  1. 如何使参数正确运行?尤其是绝对路径。
  2. 如何避免在命令行中解析类似文件的名称?

1 个答案:

答案 0 :(得分:1)

实际上,您可以使用bindmount volume来做到这一点:

$ my_wrapper.sh /some/file/argument

my_wrapper.sh的内容:

#!/bin/bash

if [ "$#" -ne 1 ]; then
    echo "Illegal number of parameters"
    exit 1
else
    if [ -f "$1" ]; then
        dir=$(dirname "$1")
    else
        echo "File doesn't exist"
        exit 2
    fi
fi

IMAGE=xxxx

docker run --rm -it -v "$dir":"$dir" \
    "$IMAGE" \
    "$1"