无法从Docker容器中退出

时间:2016-07-15 17:22:37

标签: bash docker dockerfile

我有一个我运行的容器

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

通常情况下,我会进入容器终端,我可以使用exit命令退出容器终端。现在,我有一个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次)。

为什么我的容器有此行为?

2 个答案:

答案 0 :(得分:0)

su manpage说:

  

- , - l, - login              提供类似于用户期望的环境              用户直接登录

它生成了另一个shell,从exit回到父container shell。

如此改变

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

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

可能是解决方案

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

答案 1 :(得分:0)

这是如何更改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