Монтирование нескольких томов, представленных в файле Json в виде списка - PullRequest
2 голосов
/ 06 мая 2019

Я бы хотел смонтировать несколько томов папок в команде docker run.Но при создании контейнера с использованием скрипта происходит сбой.Имена папок томов извлекаются из файла json.

Когда я пробовал отдельно как

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

Тогда все работает нормально.

Но я хотел бы связатьнесколько томов, как показано ниже.

sample.json File

{
        "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 Ответ

2 голосов
/ 07 мая 2019

Ваша команда 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
...