Я не могу получить 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
Другие вопросы по тегам