我使用这个命令运行了我的Docker容器:docker run –name test1 -d -e FLAG =’***’rastasheep / ubuntu-sshd现在,当我通过SSH连接到它时,我无法通过printenv FLAG获得我的环境。怎么能 …
尝试使用以下命令:
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
现在,当我通过SSH连接到它时,我无法通过它获取我的环境 printenv FLAG。我怎样才能解决这个问题?当用-it和sh运行时,我可以 我通过printenv FLAG获得环境
你正在做两件事:
docker run -it -e FLAG='***' rastasheep/ubuntu-sshd sh
docker run -d -e FLAG='***' rastasheep/ubuntu-sshd
运行容器,使用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,以及SSH守护进程的env var:
root@788fa982c2d0:~# printenv FLAG # Nothing root@788fa982c2d0:~# cat /proc/1/environ # We see the FLAG env var! [..]FLAG=test[...]
正如@Dmitrii指出的那样,你可以阅读 Dockerize SSH服务 更多细节。