bash - 将 Json 文件中存在的多个卷挂载为列表
问题描述
我想在 docker run 命令中挂载多个文件夹。但是在使用脚本创建容器时失败了。卷文件夹名称是从 json 文件中获取的。
当我单独尝试时
docker run -it -v /home/sample_1: /test1 -v /home/sample_2: /test2 ubuntu /bin/bash
然后它工作正常。
但我想绑定多个卷,如下所示。
示例.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 命令docker_script.sh
等于下一个:
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
推荐阅读
- macos - 移至... > iCloud > 便笺选项已禁用
- azure - VM Scaleset 与 Azure Batch
- azure - Azure AD 访问令牌 appid 声明值
- android - Android 工具栏标题在标题中显示白色背景
- python - 在python中插入排序后的二进制搜索
- scala - 是否可以在扩展的 scala 类中扩展方法?
- javascript - 如何将图像 url 从 firebase 显示到 html 表中?
- sql - 使用上一行的值和下一行的值计算平均值
- android - 安卓服务是否会因为从不安全的网络从 Play 商店下载应用程序而被黑客入侵
- java - 在 Java 中锁定文件通道时出现 OverlappingFileLockException