在脚本中切换用户后运行node.js

时间:2018-07-19 15:35:28

标签: node.js bash docker

我有以下脚本:

#!/bin/bash
su newuser
node index.js

此脚本是docker容器的入口点。

运行容器时,我看到脚本已执行,然后切换到newuser。但是,不会调用index.js。但是,一旦我键入“ exit”退出newuser,index.js就开始运行。

请问有人可以解释这里的问题吗?

2 个答案:

答案 0 :(得分:2)

su newuser将创建一个新的外壳。基本上,该命令启动一个需要花费时间才能退出的进程。只有退出后,原始bash脚本中的下一个命令才会执行。

如果要以newuser身份运行节点,请改用以下命令:

su newuser -c "node index.js"

您可能还希望包括节点的完整路径,因为以这种方式启动脚本通常不会带来您期望的完整环境(与运行完整的shell相比,PATH可能不完整):

su newuser -c "/path/to/node index.js"

答案 1 :(得分:1)

如果该脚本是入口点脚本,则完全不需要设置用户名; Dockerfile中的USER指令可以设置(默认)用户名或用户ID。

对于这种简单的设置,我根本不会使用入口点脚本。我要放入Dockerfile

USER newuser
CMD ["node", "index.js"]

通常,我会避免运行固定命令的入口点脚本或ENTRYPOINT指令(并且更喜欢CMD而不是ENTRYPOINT),因为它们会使事情变得非常有用,否则它们将非常有用

docker run --rm -it myimage sh