gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:19:57 25 4
gpt4 key购买 nike

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

当我单独尝试时

docker run -it -v /home/sample_1: /test1  -v  /home/sample_2: /test2 ubuntu /bin/bash

然后它工作正常。

但我想绑定(bind)多个卷,如下所示。

示例.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

最佳答案

您在 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

关于bash - 将 Json 文件中存在的多个卷挂载为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56011005/

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