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.
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']
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
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)"]