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
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
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
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
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 ${*}", "--"]
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
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