Обмен файлами между CLI в контейнере и хостом - PullRequest
0 голосов
/ 29 апреля 2020

Мне нужно контейнировать существующий CLI, который также читает и пишет файлы. Нечто похожее на контейнер cp или kubectl любой другой типичной команды 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 Ответ

1 голос
/ 29 апреля 2020

Действительно, вы можете сделать это с томом bindmount :

$ 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"
...