Как передать аргументы в сценарий оболочки через docker run


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

#!bin/bash
echo 

Dockerfile выглядит так:

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

Я не уверен, как передать аргументы при запуске контейнера

5 55

5 ответов:

обновление file.sh

#!/usr/bin/env bash
echo 

создайте изображение, используя существующий Dockerfile:

docker build -t test .

запустите изображение с аргументами abc или xyz или что-то еще.

docker run -ti test /file.sh abc

docker run -ti test /file.sh xyz

С этим скриптом в file.sh

#!/bin/bash
echo Your container args are: "$@"

и Dockerfile

FROM ubuntu:14.04
COPY ./file.sh /
ENTRYPOINT ["/file.sh"]
CMD []

вы должны уметь:

% docker build -t test .
% docker run test hello world
Your container args are: hello world

С помощью Docker правильный способ передачи такого рода информации - это переменные среды.

Итак, с тем же Dockerfile, измените скрипт на

#!/bin/bash
echo $FOO

после построения, используйте следующую команду docker:

docker run -e FOO="hello world!" test

у меня есть файл скрипта, который на самом деле запускает вещи. Этот файл scrip может быть относительно сложным. Назовем его "run_container". Этот скрипт принимает аргументы из командной строки:

run_container p1 p2 p3

простой run_container может быть:

#!/bin/bash
echo "argc = ${#*}"
echo "argv = ${*}"

то, что я хочу сделать, это после "dockering" это я хотел бы иметь возможность запустить этот контейнер с параметрами в командной строке docker следующим образом:

docker run image_name p1 p2 p3

и есть run_container скрипт будет выполняться с p1 p2 p3 в качестве параметров.

Это мое решение:

Dockerfile:

FROM docker.io/ubuntu
ADD run_container /
ENTRYPOINT ["/bin/bash", "-c", "/run_container ${*}", "--"]

Если вы хотите запустить его @build time:

CMD /bin/bash /file.sh arg1

Если вы хотите запустить его @run time:

ENTRYPOINT ["/bin/bash"]
CMD ["/file.sh", "arg1"]

затем в оболочке хоста

docker build -t test .
docker run -i -t test