2017-09-15 5 views
0

Je commence 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 en compte les paramètres de l'URL du serveur pour l'API, la clé API et le chemin du fichier à analyser. J'ai utilisé argparse pour gérer cela dans le script.Passer les arguments à Python argparse dans le conteneur Docker

Comment puis-je obtenir ces données passées dans Docker? Je ne veux pas coder dur car je cherche à remettre ce script à un ingénieur qui doit le faire périodiquement et agir en fonction des résultats.

Merci pour votre aide. J'ai cherché mais il semble que les choses codées dans le dockerfile soient la suggestion - je veux que l'utilisateur soit capable de les mettre au moment de l'exécution. Ou peut-être que j'ai trouvé la réponse et que je ne la comprends pas ...

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

+0

Donc j'ai pris un peu des deux réponses et l'ai obtenu où j'en avais besoin. Merci pour votre aide mais je ne sais pas qui marquer comme la "réponse" ... –

Répondre

2

La façon dont vous le faites dépend de l'utilisation de votre docker. Si vous voulez 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 d'exécution docker sera être ajouté à l'entrypoint. Alors

, 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 ressemble vous voulez cette option. Vous devez changer votre dockerfile pour spécifier

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

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

docker run --rm <yourImageName> -a API_KEY - f FILENAME -o ORG_ID 
+0

Donc mon script python est la raison du conteneur. J'ai juste: "CMD [" python "," ./ script.py "]" dans le Dockerfile mais je veux passer "-a API_KEY -f FILENAME -o ORG_ID" –

+0

édité ma réponse pour refléter ce que vous voulez – Chris

4

Alors supposons que votre commande est inférieure à

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

Alors vous mettrez votre Dockerfile en dessous de la mode

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

Ensuite, la personne qui exécute le conteneur docker 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 un 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']