我有一个我运行的容器
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次)。
为什么我的容器有此行为?
答案 0 :(得分:0)
- , - 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