告诉我们我们是否在docker内部的命令

时间:2019-03-05 16:55:56

标签: docker environment-variables

作为复杂CI系统的新手,尝试脚本时,我感到困惑的是,我的脚本是直接由系统的bash执行,还是从同一系统上运行的docker容器执行。因此,问题是:什么命令(环境变量查询或其他命令)可以告诉我是否在docker中?

2 个答案:

答案 0 :(得分:1)

  • 我猜您正在尝试确定您的脚本是从docker容器的上下文中运行还是从运行docker的主机中运行。
  • 另一种查看方式是:您有一个正在运行的脚本,而该脚本实际上是一个进程。并且任何给定的进程都有关联的PID。
  • 您可能想找出此过程是在docker容器中还是直接在主机中运行。
  • 假设您的进程在docker容器中运行,那么我们可以得出结论docker进程是您的进程的父级
  • 运行top命令将列出计算机中的所有进程。然后使用另一个命令ps -axfo pid,uname,cmd将给出进程的完整列表
  • 假设您已经标识了父进程ID(例如:2871)。现在您可以运行

docker ps | awk '{ print $1}' | xargs docker inspect -f '{{ .State.Pid }} {{ .Config.Hostname }}' | grep 2871

使用此方法,您可以识别包含进程的容器

  • 如果运行pstree,则可以一直到启动过程的整个过程树

礼貌:

Finding out to which docker container a process belongs to

how-do-i-get-the-parent-process-id-of-a-given-child-process

希望这会有所帮助

答案 1 :(得分:0)

如果您发现自己在容器中,则必须已执行命令才能进入该容器。

如果您忘记了位置,请键入docker ps。如果失败,则您位于Docker容器中。

编辑:

很显然,当您在docker中运行docker时,此简单技巧不起作用。