Activer python virtualenv dans Dockerfile
J'ai un Dockerfile où je tente d'activer python virtualenv après quoi, il doit installer toutes les dépendances au sein de ce ministère. Cependant, tout est installé dans le monde. J'ai utilisé des approches différentes et non d'entre eux travaillaient. J'ai aussi ne pas faire d'erreurs. Où est-elle un problème?
1.
ENV PATH $PATH:env/bin
2.
ENV PATH $PATH:env/bin/activate
3.
RUN . env/bin/activate
J'ai également suivi un exemple d'un Dockerfile config pour le python-runtime image sur Google Cloud, qui est essentiellement la même chose que ci-dessus.
La définition de ces variables d'environnement sont les mêmes que l'exécution de la source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
De plus, ce qui ne ENV VIRTUAL_ENV /env
signifie et comment est-il utilisé?
source ../bin/activate
essayé ?Êtes-vous à l'exécution de plusieurs applications python dans le même conteneur Docker?
Il n'est pas recommandé d'utiliser virtualenv dans un Dockerfile depuis que vous aviez idéalement, il suffit de l'installer à l'échelle mondiale en utilisant une seule application par conteneur pratique. Cependant, je suis heureux, je suis tombé sur ce parce que j'ai une unité de test de cas d'utilisation qui nécessite virtualenv dans un Dockerfile. Il peut sembler étrange, mais une partie de l'épreuve est de virtualenv intégration. Je vous remercie pour cette question.
OriginalL'auteur igsm | 2018-02-01
Vous devez vous connecter pour publier un commentaire.
Comme d'autres l'ont dit, virtualenvs dans un conteneur docker sont un peu d'un bord de cas, mais il ya encore des raisons légitimes.
Vous n'avez pas nécessairement besoin d'activer le virtualenv pour installer le logiciel ou l'utiliser. Essayez d'appeler les exécutables directement à partir de la virtualenv est
bin
répertoire:OriginalL'auteur Ellis Percival
Vous n'avez pas besoin d'utiliser virtualenv à l'intérieur d'un Conteneur Docker.
virtualenv est utilisé pour la dépendance à l'isolement. Vous voulez éviter des dépendances ou des paquets installés de fuite entre les applications. Docker réalise la même chose, il isole vos dépendances à l'intérieur de votre conteneur et d'éviter les fuites entre les conteneurs et entre les applications.
À cet effet, il n'y a pas de point à l'aide de virtualenv à l'intérieur d'un Conteneur Docker, sauf si vous exécutez plusieurs applications dans le même conteneur, si c'est le cas, je dirais que vous êtes en train de faire quelque chose de mal et que la solution serait de l'architecte de votre application dans une meilleure façon et de les séparer en plusieurs contenants.
virtualenv
répertoire est sans la nécessité de python3-virtualenv dans l'image cible. Qui vous permet d'économiser de l'ensemble de la chaîne de compilation (gcc et amis) et c'est ainsi que quelques centaines de mégaoctets.Vous n'avez pas besoin de python3-virtualenv pour faire de dépendance isolement entre les conteneurs.
pls im la recherche depuis des heures à me dire ce qui est avec des dépendances entre le contenant et le système d'exploitation? puis-je garder mon propre global python si je lance exigences.texte à l'intérieur d'un conteneur? Je ne veux pas installer tous les paquets à l'échelle mondiale comme virtualenv
Peut-être vous devriez étudier de plus, ce Panneau est en réalité. Vous créez un conteneur virtualisé, il est semblable à une Machine Virtuelle, vous pouvez penser à votre menu fixe des conteneurs à chacune étant une machine séparée, distincte de l'installation de Python, Linux et plus.
De nombreux paquets Python uniquement en charge l'installation dans un environnement virtuel, auquel cas il est utile d'être en mesure d'activer le venv à l'intérieur d'un conteneur docker.
OriginalL'auteur Marcus Lind
Bien que je suis d'accord avec Marcus que ce n'est pas la façon de faire avec Docker, vous pouvez faire ce que vous voulez.
À l'aide de la commande EXÉCUTER du menu fixe directement ne vous donnera pas la réponse car il ne va pas s'exécuter vos instructions à partir de l'intérieur de l'environnement virtuel. Au lieu de presser les instructions exécutées dans une seule ligne à l'aide de /bin/bash. La suite Dockerfile fonctionné pour moi:
Cela devrait installer le pyserial module seulement sur l'environnement virtuel.
Espère que vous avez résolu le problème de toute façon. Cependant, c'est bizarre, comment voulez-vous vérifier si l'installation est faite?
Est le "&& désactiver" à la fin vraiment nécessaire? docker est de commencer les passages suivants de nouvelles coques de toute façon, non?
Droit, j'ai juste ajouté ça à être propre dans le cas où l'activation a eu aucun impact sur le système de fichiers, ce qui permettrait de rester dans le Panneau de l'image. Il n'est probablement pas indispensable.
OriginalL'auteur pinty
Si vous votre à l'aide de python 3.x :
Si vous utilisez python 2.x :
OriginalL'auteur Chirag Maliwal