将存在于Json文件中的多个卷挂载为列表

时间:2019-05-06 19:07:27

标签: bash docker docker-run

我想在docker run命令中挂载多个文件夹。但是使用脚本创建容器时失败。 卷文件夹名称是从json文件中提取的。

当我以

单独尝试时
docker run -it -v /home/sample_1: /test1  -v  /home/sample_2: /test2 ubuntu /bin/bash

然后一切正常。

但是我想绑定多个卷,如下所示。

sample.json文件

{
        "volume_mount": ["/home/sample_1:/test1", "/home/sample_2:/test2"],
        "name": "deva"
}

docker_script.sh

#!/bin/bash
volume_mount=$(jq -r '."volume_mount"//empty' sample.json )
echo $volume_mount
docker run -it ${volume_mount:+--volume ${volume_mount}} ubuntu /bin/bash

预期

容器应在容器中创建并装载两个卷/ test1和/ test2数据。

错误


./docker_sample.sh 
++ jq -r '."volume_mount"//empty' sample.json 
+ volume_mount='[ "/home/sample_1:/test1", "/home/sample_2:/test2" ]' 
+ echo '[' '"/home/sample_1:/test1",' '"/home/sample_2:/test2"' ']' [ "/home/sample_1:/test1", "/home/sample_2:/test2" ] 
+ docker run -it --volume '[' '"/home/sample_1:/test1",' '"/home/sample_2:/test2"' ']' ubuntu /bin/bash 
docker: invalid reference format

1 个答案:

答案 0 :(得分:2)

您在docker_script.sh中的docker命令等于下一个:

docker run -it --volume [ "/home/sample_1:/test1", "/home/sample_2:/test2" ] ubuntu /bin/bash

您为什么认为此语法有效?您应该让它看起来像您最初使用的命令:-v xxx:xxx -v xx:xx,如下所示:

docker_script.sh:

#!/bin/bash
volume_mount=$(jq -r .volume_mount[] sample.json)
volume_string=""
for per_volume_mount in $volume_mount
do
    volume_string="$volume_string -v $per_volume_mount"
done
docker run -it $volume_string ubuntu /bin/bash