Execute Bash in Docker

Docker

在 Docker 开发的过程中,有时会有脚本出错,导致执行结果不及预期的情况。这种错误有时是环境导致的,在非 Docker 环境下无法重现。如果需要通过构建 Docker 添加诸如日志之类的信息来了解具体可能出错的原因,不免有些曲折。可以考虑直接在 Docker 环境下运行 Bash 命令,通过执行脚本中的语句,来查找可能出现问题的原因。

要在 Docker 环境下执行 Bash 脚本,可以遵循以下的步骤:

  1. 首先,需要知道当前运行 Docker 的容器 ID
docker container ls

上述命令会列出所有的容器,找到需要调试的那一个即可。

  1. 在该容器环境内执行 Bash 命令
docker exec -ti xxx /bin/bash

这里,xxx 就是第一步找到的 Container ID。上述命令用到了两个参数,-t-i-t--tty 的缩写,用于让 Docker 将用户的终端和 stdin/stdout 关联起来;-i--interactive 的缩写,用于让 Docker 在执行命令的时候允许用户进行交互式的输入输出。

如果只是希望执行一个语句并输出结果(比如 echo 一个字符串),那么 -t 就足够了,不需要 -i。但是对于需要在 Docker 环境下输入 Bash 命令并检查执行结果的情况来说,-i 就是必须的。

一个输出 Hello World 的简单例子:

docker exec -t echo "hello world"

另外,可以通过如下的命令知道,docker exec 运行的默认环境是在 / 下:

docker exec -t pwd # output: /

如需修改这一默认行为,可以通过 -w 参数(或 --workdir)来执行:

docker exec -w /root -t xxx pwd # output: /root