2
votes

Je ne peux pas obtenir env var dans le conteneur Docker

J'ai exécuté mon conteneur Docker à l'aide de cette commande: docker run --name test1 -d -e FLAG = '***' rastasheep / ubuntu-sshd Maintenant, quand je me connecte via SSH, je ne peux pas y accéder via printenv FLAG . Comment puis-je réparer cela? Lorsque j'exécute avec -it et sh , je peux obtenir mon env via printenv FLAG .


4 commentaires

Peut-être que les envs passés avec -e ne sont utilisés que pour le point d'entrée et ne sont pas définis dans l'environnement de conteneur?


Le voyez-vous si vous faites docker exec test1 env ?


@Alkaline oui! mais si je me connecte via ssh et lance env je ne le vois pas


Vous devez lire cet article: docs.docker.com/engine/examples/running_ssh_service, en particulier sur les variables


3 Réponses :


1
votes

Essayez d'utiliser la commande ci-dessous:

docker exec <container-id> bash -c 'echo "$<variable-name>"'


0 commentaires

2
votes

Maintenant, lorsque je me connecte via SSH, je ne peux pas y accéder via printenv FLAG. Comment puis-je réparer cela? Quand je cours avec -it et sh, je peux mon envoi via printenv FLAG

Vous faites deux choses différentes:

  • docker run -it -e FLAG = '***' rastasheep / ubuntu-sshd sh exécutera un conteneur en mode interactif avec un shell, et cette session shell aura le variable d'environnement que vous avez transmise sur la ligne de commande. Avec docker run -d -e FLAG = '***' rastasheep / ubuntu-sshd , un processus de démon SSH démarrera avec des variables d'environnement définies.
  • lorsque vous vous connectez dans le conteneur avec SSH, vous créez une nouvelle session shell qui n'a pas ces variables d'environnement définies .

Ceci peut être observé lors de l'exécution d'un conteneur, en s'y connectant en utilisant ssh et en affichant tous les processus et leur variable d'environnement:

root@788fa982c2d0:~# printenv FLAG # Nothing
root@788fa982c2d0:~# cat /proc/1/environ # We see the FLAG env var!
[..]FLAG=test[...]

Nous sommes maintenant connectés à le conteneur, nous pouvons voir le processus du démon SSH (PID 1) et notre processus de session SSH (PID 7):

root@788fa982c2d0:~# ps -xf
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 /usr/sbin/sshd -D  # <== does have the FLAG env var
    7 ?        Ss     0:00 sshd: root@pts/0   # <== no FLAG env var

Vérifions-le, imprimons notre processus actuel env var , et la variable d'environnement du processus du démon SSH:

docker run -d -p 2222:22 -e FLAG='test' rastasheep/ubuntu-sshd
ssh root@localhost -p 2222
...

Comme indiqué par @Dmitrii, vous pouvez lire Dockerize un service SSH pour plus de détails.


0 commentaires

0
votes

Comme suggéré par documents vous devrez peut-être créer votre propre Dockerfile avec les modifications suivantes

 docker build -t your-ubuntu-sshd .
 docker run --name test1 -d -e FLAG='abc' -p 2222:22 your-ubuntu-sshd

Dockerfile

#!/bin/bash
echo "export FLAG=$FLAG" >> /etc/profile
exec "$@"

Fichier: entrypoint.sh

FROM rastasheep/ubuntu-sshd
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["/usr/sbin/sshd", "-D"]

Commande:

Project  
|--Dockerfile  
|--entrypoint.sh


0 commentaires