linux - 我无法在 Docker 容器中获取 env var
问题描述
我已经使用这个命令运行了我的 Docker 容器:
docker run --name test1 -d -e FLAG='***' rastasheep/ubuntu-sshd
现在,当我通过 SSH 连接到它时,我无法通过printenv FLAG
. 我怎样才能解决这个问题?使用 and 运行时-it
,sh
我可以通过printenv FLAG
.
解决方案
现在,当我通过 SSH 连接到它时,我无法通过 printenv FLAG 获取我的环境。我怎样才能解决这个问题?使用 -it 和 sh 运行时,我可以通过 printenv FLAG 获取 env
你正在做两件不同的事情:
docker run -it -e FLAG='***' rastasheep/ubuntu-sshd sh
将在与 shell 的交互模式下运行容器,并且此 shell 会话将具有您在命令行上传递的环境变量。使用docker run -d -e FLAG='***' rastasheep/ubuntu-sshd
,SSH 守护进程将以定义的环境变量开始。- 当您使用 SSH 在容器中连接时,您将创建一个没有设置这些环境变量的新 shell 会话。
这可以在运行容器、使用 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 an SSH 服务以了解更多详细信息。
推荐阅读
- python - 如何在pyqt5中添加可折叠按钮
- c# - 如何解决错误在前一个操作完成之前在此上下文上启动了第二个操作
- javascript - onclick 函数传参
- scala - akka timer 提供消息 Cancel timer [Message] with generation [583]
- mqtt - Wemos 上的 umqtt.robust
- php - 如何在php中删除菜单标题?
- java - 不知道 cookie Idea-f5324dcc=41f745e2-43a5-4a7f-8e31-1b35896e1ac6 代表什么
- php - PHP工匠使用没有端口号的域
- php - 强制在 WooCommerce 结账时仅购买预定义数量
- mysql - 在 mysql 上使用多个 goroutine 进行不同的操作