gpt4 book ai didi

linux - 我无法在 Docker 容器中获取环境变量

转载 作者:太空狗 更新时间:2023-10-29 12:09:00 28 4
gpt4 key购买 nike

我已经使用以下命令运行了我的 Docker 容器:docker run --name test1 -d -e FLAG='***' rastasheep/ubuntu-sshd现在,当我通过 SSH 连接到它时,我无法通过 printenv FLAG 获取我的环境。我怎样才能解决这个问题?当使用 -itsh 运行时,我可以通过 printenv FLAG 获取环境。

最佳答案

Now, when I connect to it via SSH, I can't get my env there via printenv FLAG. How can I fix this? When running with -it and sh, I can my get env via printenv FLAG

你在做两件不同的事情:

  • docker run -it -e FLAG='***' rastasheep/ubuntu-sshd sh 将使用 shell 以交互模式运行容器,此 shell session 将具有您在命令行上传递的环境变量。使用 docker run -d -e FLAG='***' rastasheep/ubuntu-sshd,SSH 守护进程将以定义的环境变量启动。
  • 当您使用 SSH 连接容器时,您将创建一个没有设置这些环境变量的新 shell session

这可以在运行容器、使用 ssh 连接到它并显示所有进程及其环境变量时观察到:

docker run -d -p 2222:22 -e FLAG='test' rastasheep/ubuntu-sshd
ssh root@localhost -p 2222
...

我们现在连接到容器中,我们可以看到 SSH 守护进程(PID 1)和我们的 SSH session 进程(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

让我们检查一下,打印我们当前的进程环境变量,以及 SSH 守护进程的环境变量:

root@788fa982c2d0:~# printenv FLAG # Nothing
root@788fa982c2d0:~# cat /proc/1/environ # We see the FLAG env var!
[..]FLAG=test[...]

正如@Dmitrii 所指出的,您可以阅读 Dockerize an SSH service更多细节。

关于linux - 我无法在 Docker 容器中获取环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55182220/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com