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
.
3 Réponses :
Essayez d'utiliser la commande ci-dessous:
docker exec <container-id> bash -c 'echo "$<variable-name>"'
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. Avecdocker 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 varVé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.
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
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 pasVous devez lire cet article: docs.docker.com/engine/examples/running_ssh_service, en particulier sur les variables