web-dev-qa-db-fra.com

Passez des arguments à Python argparse dans le conteneur Docker

Je me lance dans ma première tentative d'utilisation d'un conteneur docker. J'ai un script python qui appelle quelques API et analyse un fichier. Le script a pris des paramètres pour l'URL du serveur pour l'API, la clé d'API et le chemin d'accès du fichier vers J'ai utilisé argparse pour les gérer dans le script.

Comment les faire passer dans Docker? Je ne veux rien coder en dur car je cherche à remettre ce script à un ingénieur qui doit l'exécuter périodiquement et prendre des mesures en fonction des résultats.

Merci de votre aide. J'ai cherché, mais il semble que le codage en dur dans le dockerfile soit la suggestion - je veux que l'utilisateur puisse les insérer au moment de l'exécution. Ou peut-être que j'ai trouvé la réponse et que je ne la comprends tout simplement pas ...

Je m'excuse si mon jargon n'est pas correct - c'est ma première tentative d'utilisation de Docker.

13

Supposons donc que votre commande est en dessous

python app.py "URL" "APIKEY" "filepath"

Vous allez donc mettre votre Dockerfile en dessous de la mode

FROM python:3.6
WORKDIR /app
COPY app.py .
ENTRYPOINT ["python", "app.py"]

Ensuite, la personne exécutant le conteneur docker le ferait comme ci-dessous

docker run -v /home/tarun/project/filetoparse.yaml:/config.yaml <yourimagename> "URL" "APIKEY" /config.yaml

Si vous voulez donner plus de flexibilité, vous pouvez même utiliser des variables d'environnement

docker run -v /home/tarun/project/filetoparse.yaml:/config.yaml -e APIKEY="XYZ" <dockerimage> "URL" /config.yaml

Et puis dans votre script, vous pouvez le lire en utilisant os.environ['APIKEY']

15
Tarun Lalwani

La façon dont vous le faites dépend de la façon dont vous utilisez Docker. Si vous souhaitez exécuter votre script dans un conteneur déjà en cours d'exécution, vous pouvez utiliser exec:

docker exec <yourContainerName> python <yourScript> <args>

Alternativement, si vous avez une image docker où votre script est le POINT D'ENTRÉE, tous les arguments que vous passez à la commande runer docker seront ajoutés au point d'entrée.

Donc, si votre fichier docker ressemble à ceci:

FROM yourbase
....
ENTRYPOINT <yourScript>

Ensuite, vous pouvez simplement exécuter le script en exécutant le conteneur lui-même:

docker run --rm <yourImageName> <args>

Sur la base de votre commentaire ci-dessous, il semble que vous souhaitiez cette option. Vous devez modifier votre dockerfile pour spécifier

ENTRYPOINT ["python","./script.py"]

(au lieu d'utiliser CMD), puis vous pouvez exécuter via:

docker run --rm <yourImageName>  -a API_KEY - f FILENAME -o ORG_ID
10
Chris

Dans Dockerfile, j'utilise la commande CMD comme ceci:

FROM python:3
COPY ./app /app
WORKDIR /app
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r req.pip
CMD ["python","start.py","(api-url) ","(api-key)","(file-path)"]

Remarque Pour chaque argument/paramètre, séparé par un coma

Si vous utilisez des drapeaux, vous devrez diviser

CMD ["python","start.py","-u","(api-url) ","-k","(api-key)","-f","(file-path)"]
2
Alex Montoya