Я не могу получить env var в контейнере Docker - PullRequest
1 голос
/ 15 марта 2019

Я запустил свой Docker-контейнер с помощью этой команды: docker run --name test1 -d -e FLAG='***' rastasheep/ubuntu-sshd Теперь, когда я подключаюсь к нему через SSH, я не могу получить свой env там через printenv FLAG. Как я могу это исправить? При работе с -it и sh я могу получить env через printenv FLAG.

Ответы [ 3 ]

1 голос
/ 15 марта 2019

Теперь, когда я подключаюсь к нему через SSH, я не могу получить свой env там через принтенв ФЛАГ. Как я могу это исправить? При запуске с -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 для получения более подробной информации.

1 голос
/ 15 марта 2019

Попробуйте использовать приведенную ниже команду:

docker exec <container-id> bash -c 'echo "$<variable-name>"'
0 голосов
/ 15 марта 2019

В соответствии с рекомендациями docs вам может потребоваться создать собственный 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
...