Запустите скрипт оболочки с аргументами для любого заданного файла с помощью docker run - PullRequest
0 голосов
/ 24 марта 2020

Я docker новичок. Я использовал этот SO post для запуска сценария оболочки с docker run, и это прекрасно работает. Однако я пытаюсь применить свой сценарий оболочки к файлу, который находится в моем текущем рабочем каталоге, где находятся Dockerfile и script.

Мой сценарий оболочки - если в качестве аргумента указан файл, вернуть его имя и количество строк:

#!/bin/bash
echo $1
wc -l $1

Dockerfile:

FROM ubuntu
COPY ./file.sh /
CMD /bin/bash file.sh

затем сборка и запуск:

docker build -t test .
docker run -ti test /file.sh text_file

Вот что я получаю:

text_file
wc: text_file: No such file or directory

Я не знаю, почему вторая строка не работает, почему файл не может быть найден. Я не хочу копировать мой text_file в контейнер. В идеале я хотел бы запустить свой скрипт из контейнера docker для любого файла в моем текущем рабочем каталоге. Любая помощь будет высоко ценится. Спасибо !!

1 Ответ

1 голос
/ 24 марта 2020

Вы создаете Docker изображение, содержащее скрипт /file.sh. Тем не менее, ваш Docker контейнер не содержит (или не знает) о файле text_file, который вы передаете в качестве аргумента.

Чтобы сделать его известным для вашего Docker контейнера, вы должны смонтировать его при запуске контейнера.

docker run --rm -it -v "$PWD"/text_file:/text_file test /file.sh /text_file

Чтобы проверить другие файлы, вам просто нужно swap text_file как в монтировании, так и в аргументе.

Примечания

Помимо Docker томов для монтирования , я мог бы предложить еще несколько улучшений, чтобы оживить ваш образ.

  1. Для запуска сценария у вас нет использовать ubuntu в качестве базового изображения. Вам может быть хорошо с alpine или даже более сфокусированным bash. И не забывайте использовать теги для обеспечения того же поведения с течением времени.
  2. Вы можете установить свой скрипт как ENTRYPOINT вашего Dockerfile. Затем в качестве команды указывается только имя скрипта (в данном случае text_file).
  3. При монтировании файлов вы можете изменить имя файла в вашем контейнере. Таким образом, вы можете упростить ваш сценарий и просто примонтировать файл для тестирования в одном и том же месте при каждом запуске контейнера.
FROM alpine:3.10

WORKDIR /tmp

COPY file.sh /usr/local/bin/wordcount

ENTRYPOINT /usr/local/bin/wordcount

CMD file

Тогда

docker run --rm -it -v "PWD"/text_file:/tmp/file test 

будет сделай работу.

...