Jak przekazać argumenty do skryptu powłoki przez docker run

Jestem nowy w świecie dokerów. Muszę wywołać skrypt powłoki, który pobiera argumenty linii poleceń przez kontener dokera. Ex: mój skrypt powłoki wygląda następująco:

#!bin/bash
echo $1

Plik Dockerfile wygląda tak:

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

Nie jestem pewien, jak przekazać argumenty podczas uruchamiania kontenera

Author: Akash Mehta, 2015-09-23

5 answers

Update file.sh

#!/usr/bin/env bash
echo $1

Zbuduj obraz używając istniejącego pliku Dockerfile:

docker build -t test .

Uruchom obraz z argumentami abc lub xyz lub czymś innym.

docker run -ti test /file.sh abc

docker run -ti test /file.sh xyz
 31
Author: BMW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 08:32:41

Z tym skryptem w file.sh

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

I to Dockerfile

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

Powinieneś być w stanie:

% docker build -t test .
% docker run test hello world
Your container args are: hello world
 59
Author: Partly Cloudy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-28 19:51:06

W przypadku Dockera, właściwym sposobem przekazywania tego rodzaju informacji są zmienne środowiskowe.

Więc z tym samym plikiem Dokerowym Zmień skrypt na

#!/bin/bash
echo $FOO

Po zbudowaniu użyj następującego polecenia docker:

docker run -e FOO="hello world!" test
 38
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-23 02:09:38

To, co mam, to plik skryptu, który faktycznie uruchamia rzeczy. Ten plik scrip może być stosunkowo skomplikowany. Nazwijmy to "run_container". Ten skrypt pobiera argumenty z linii poleceń:

run_container p1 p2 p3

Prosty run_container może być następujący:

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

Chcę to zrobić, po "dokowaniu" tego chciałbym móc uruchomić ten kontener z parametrami w linii poleceń Dockera w następujący sposób:

docker run image_name p1 p2 p3

I niech skrypt run_container zostanie uruchomiony z p1 p2 P3 jako parametry.

To jest moje rozwiązanie:

Dockerfile:

FROM docker.io/ubuntu
ADD run_container /
ENTRYPOINT ["/bin/bash", "-c", "/run_container ${*}", "--"]
 13
Author: jkh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-19 17:26:30

Jeśli chcesz uruchomić go @build time:

CMD /bin/bash /file.sh arg1

If you want to run it @run time:

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

Następnie w powłoce Hosta

docker build -t test .
docker run -i -t test
 4
Author: Gilles Quenot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-23 06:36:47