web-dev-qa-db-fra.com

Docker ENV pour Python

Étant nouveau dans python & docker, j'ai créé une petite application flask (test.py) qui a deux valeurs codées en dur:

username = "test"
password = "12345"

Je peux créer une image Docker et exécuter un conteneur à partir du Dockerfile suivant:

FROM python:3.6

RUN mkdir /code  
WORKDIR /code  
ADD . /code/  
RUN pip install -r requirements.txt  

EXPOSE 5000  
CMD ["python", "/code/test.py"]`

Comment puis-je créer une variable ENV pour le nom d'utilisateur et le mot de passe et transmettre des valeurs dynamiques lors de l'exécution de conteneurs?

16
user2153844

Dans votre code python vous pouvez lire des variables env comme:

import os
username = os.environ['MY_USER']
password = os.environ['MY_PASS']
print("Running with user: %s" % username)

Ensuite, lorsque vous exécutez votre conteneur, vous pouvez définir ces variables:

docker run -e MY_USER=test -e MY_PASS=12345 ... <image-name> ...

Cela définira la variable env dans le conteneur et celles-ci seront lues ultérieurement par le script python (test.py)

Plus d'informations sur os.environ et docker env

30
urban

Dans votre code Python vous pouvez faire quelque chose comme ceci:

 # USERNAME = os.getenv('NAME_OF_ENV_VARIABLE','default_value_if_no_env_var_is_set')
 USERNAME = os.getenv('USERNAME', 'test')

Ensuite, vous pouvez créer un fichier docker-compose.yml pour exécuter votre dockerfile avec:

version: '2'
services:
  python-container:
    image: python-image:latest
    environment:
      - USERNAME=test
      - PASSWORD=12345

Vous exécuterez le fichier de composition avec:

$ docker-compose up

Tout ce dont vous devez vous souvenir est de créer votre dockerfile que vous avez mentionné dans votre question avec:

$ docker build -t python-image .

Faites-moi savoir si cela vous a été utile. J'espère que cela répond à votre question.

13
OpenBSDNinja