码头工人如果没有shell进程怎么办?

时间:2017-01-16 12:34:20

标签: docker

docker exec <container> <command>。 在文档中写道:

  

在正在运行的容器中运行命令

但这究竟是什么意思?在容器中执行命令意味着什么。我无法想象exec命令是由容器中运行的shell执行的情况。但我们不能假设每个容器都运行shell或shell。

3 个答案:

答案 0 :(得分:0)

当我想进入容器并看看里面发生了什么时,对我来说docker exec <container> command很有用。

docker exec -it <container> sh

或者在某些情况下我需要在正在运行的应用程序中移动或查看配置文件

docker exec <container> ls /root/config_files/

即使在alpine:latest这样的微容器中,你的内部也有sh,它也是默认的入口点/bin/sh -c

docker run alpine echo "hola mundo"

答案 1 :(得分:0)

容器是您的进程的隔离环境,具有自己的网络环境,挂载的文件系统,命名空间进程列表等。当您执行docker run时,通过运行命令pid 1来创建此命名空间。执行docker exec,您可以在同一命名空间内运行任何命令。 E.g:

$ docker run --name test-exec -d busybox tail -f /dev/null
5e77cec13293e7146dac6858ed11be1e6a706ba973c419435303f4ec8c346e2d

$ docker exec test-exec ps -ef
PID   USER     TIME   COMMAND
    1 root       0:00 tail -f /dev/null
    6 root       0:00 ps -ef

请注意,在上述两个命令中,我都没有运行shell。

答案 2 :(得分:0)

docker exec <container> <command>将在指定容器的命名空间中运行给定命令。 docker exec创建新进程并将其命名空间设置为容器的命名空间,然后执行命令。

有关Linux命名空间的更多信息,请访问: Namespaces in operation

可以使用以下命令找到进程的命名空间:

sudo ls -l /proc/<PID>/ns