Я не могу получить env var в контейнере Docker
Я запустил свой Docker-контейнер с помощью этой команды:docker run --name test1 -d -e FLAG='***' rastasheep/ubuntu-sshd
Теперь, когда я подключаюсь к нему через SSH, я не могу получить свой env там через printenv FLAG
, Как я могу это исправить? Когда работает с -it
а также sh
Я могу получить ENV через printenv FLAG
,
3 ответа
Теперь, когда я подключаюсь к нему через SSH, я не могу получить свой env там через printenv FLAG. Как я могу это исправить? При запуске с -it и sh я могу получить env через printenv FLAG
Вы делаете две разные вещи:
docker run -it -e FLAG='***' rastasheep/ubuntu-sshd sh
будет запускать контейнер в интерактивном режиме с оболочкой, и этот сеанс оболочки будет иметь переменную среды, которую вы передали в командной строке. Сdocker run -d -e FLAG='***' rastasheep/ubuntu-sshd
, процесс демона SSH начнется с определенных переменных env.- когда вы подключаетесь в контейнере с SSH, вы создаете новый сеанс оболочки, в котором не установлены эти переменные среды.
Это можно наблюдать при запуске контейнера, подключении к нему с помощью ssh и отображении всех процессов и их переменных среды:
docker run -d -p 2222:22 -e FLAG='test' rastasheep/ubuntu-sshd
ssh root@localhost -p 2222
...
Теперь мы подключены к контейнеру, мы можем видеть процесс демона SSH (PID 1) и наш процесс сеанса 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
Давайте проверим это, напечатаем наш текущий env var процесса и env var процесса SSH-демона:
root@788fa982c2d0:~# printenv FLAG # Nothing
root@788fa982c2d0:~# cat /proc/1/environ # We see the FLAG env var!
[..]FLAG=test[...]
Как отмечает @Dmitrii, вы можете прочитать Dockerize SSH service для получения более подробной информации.
Попробуйте использовать следующую команду:
docker exec <container-id> bash -c 'echo "$<variable-name>"'
В соответствии с рекомендациями документации, вам может понадобиться создать собственный Dockerfile со следующими изменениями.
Project
|--Dockerfile
|--entrypoint.sh
Dockerfile
FROM rastasheep/ubuntu-sshd
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["/usr/sbin/sshd", "-D"]
Файл: entrypoint.sh
#!/bin/bash
echo "export FLAG=$FLAG" >> /etc/profile
exec "$@"
Команда:
docker build -t your-ubuntu-sshd .
docker run --name test1 -d -e FLAG='abc' -p 2222:22 your-ubuntu-sshd