在 Docker 开发的过程中,有时会有脚本出错,导致执行结果不及预期的情况。这种错误有时是环境导致的,在非 Docker 环境下无法重现。如果需要通过构建 Docker 添加诸如日志之类的信息来了解具体可能出错的原因,不免有些曲折。可以考虑直接在 Docker 环境下运行 Bash 命令,通过执行脚本中的语句,来查找可能出现问题的原因。
要在 Docker 环境下执行 Bash 脚本,可以遵循以下的步骤:
- 首先,需要知道当前运行 Docker 的容器 ID
docker container ls
上述命令会列出所有的容器,找到需要调试的那一个即可。
- 在该容器环境内执行 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