在尝试使用 Dockerspec 测试 Dockerfiles 后,我终于得到了an issue https://github.com/zuazo/dockerspec/issues/12我无法正确解决。
我认为问题出在 Docker 本身;如果我了解了它的过程入口点仅在运行时执行,但是如果容器保持启动状态并且我启动“exec”命令,则不会重新调用它。
我认为这是想要的行为。
但如果入口点是“gosu https://github.com/tianon/gosu“脚本位于我所有命令之前,这是一个问题......
Example
“myImage”有这个入口点:gosu 1000:1000 "$@"
如果我启动:docker run -it myImage id -u
输出是“1000”。
如果我启动一个容器:docker run -it myImage bash
在这个容器中,id -u
输出“1000”。
但是,如果我在此容器中启动一个新命令,它会启动一个新 shell,并且不会执行入口点,因此:docker exec CONTAINER_ID id -u
输出“0”,因为新 shell 以“root”身份启动。
有没有办法在每次进入点时执行?
还是用shell重新打开?
或者更好的方法来做到这一点?
或者,也许我什么都没明白? ;)
Thanks !
EDIT
在阅读了这里提出的解决方案后,我明白问题不在于 Docker 如何工作,而在于 Serverspec 如何使用;我的目标是直接测试命令docker run
参数,但 Serverspec 启动一个容器并测试命令docker exec
.
所以,最好的解决方案是找到如何获取标准输出docker run
由 Serverspec 执行。
但是,在我个人的用例中,最好的解决方案可能是不使用 Gosu,而是使用 --user 标志:)