不能从Docker容器中退出

我有一个容器,我运行

docker run -it --rm --name <container_name> <image>:<tag> 

通常情况下,我可以通过exit命令进入集装箱docker。 现在,我有一个DockerFile,它以运行一个简单的bash脚本的入口点结束:

 #!/usr/bin/env bash # Add new user groupadd -r $GROUP --gid $GROUPID useradd -r $USER --uid $USERID --gid $GROUPID # Launch application with new user su - -c "python <path_to_script>/myscript.py" $USER 

现在,一旦我的脚本结束,我期望从容器中退出,但入口点bash脚本中的所有内容都会一次又一次地运行(比如10次)。

为什么我的容器有这种行为?

su manpage说:

– , – l,–login
提供一个类似于用户希望用户直接login的环境

它从您exit位置衍生出另一个shell,以回滚到父container shell。

所以改变

 su - -c "python <path_to_script>/myscript.py" $USER 

 su "$USER" -c "python <path_to_script>/myscript.py" 

可能是解决scheme


SIDENOTE:当你的目标只是执行一些命令并完成工作时,和-c一起没有任何意义

这是如何更改您的Dockerfile中的$ USER

 # Add new user RUN groupadd -r $GROUP --gid $GROUPID RUN useradd -r $USER --uid $USERID --gid $GROUPID RUN whoami USER $USER RUN whoami 

在调用你的shell脚本之前…避免在Dockerfile中使用su