【问题标题】:I can't get env var in the Docker container我无法在 Docker 容器中获取 env var
【发布时间】:2019-08-06 12:15:30
【问题描述】:

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

【问题讨论】:

  • 也许使用 -e 传递的 env 仅用于入口点并且未在容器环境中设置?
  • docker exec test1 env 看到了吗?
  • @Alkaline 是的!但如果我通过 ssh 连接并运行 env 我看不到它
  • 你需要阅读这篇文章:docs.docker.com/engine/examples/running_ssh_service,尤其是关于变量的部分

标签: linux docker containers lxc lxc-docker


【解决方案1】:

尝试使用以下命令:

docker exec <container-id> bash -c 'echo "$<variable-name>"'

【讨论】:

    【解决方案2】:

    现在,当我通过 SSH 连接到它时,我无法通过 printenv 标志。我怎样才能解决这个问题?使用 -it 和 sh 运行时,我可以 我通过 printenv FLAG 获取环境

    你在做两件不同的事情:

    • 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 service 了解更多详情。

    【讨论】:

      【解决方案3】:

      正如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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-12
        • 2015-07-07
        • 2022-09-26
        • 2020-05-13
        • 2016-10-22
        相关资源
        最近更新 更多