1. 总结问题
我想要一个节点/快速应用程序.js在容器启动时侦听端口 3000。
我创建了一个 CentOS 7 Docker 容器,安装了软件集合 (SCL( 存储库,然后安装了节点。
我现在可以使用以下命令启用节点:scl enable rh-nodejs10 bash
,所以我做到了,然后安装了 express(全局(和 pm2(全局(,并且可以使用我在命令行上运行的命令成功运行在端口 3000 上侦听的最小 Express 应用程序。
我把scl enable rh-nodejs10 bash
放在我的.bash_profile(我创建的名为:www
的用户 - 因为我不希望root运行Web服务器(。
事实上,我将在此之后构建一个无根容器(buildah(,因此出于安全考虑,根本没有"root"用户。
现在在容器启动时,我希望让 Web 服务器自动启动,并能够从以下位置获得响应:http://localhost:3000(hello world(。
问题是在容器启动时,在调用 shell 以启用它之前,不会为任何用户启用节点。
2. 提供背景信息,包括您已经尝试过的内容
我在网上搜索了将node,express,pm2与CentOS 7软件集合结合使用的解决方案,但没有找到解决方案。
请仅在您实际尝试过您推荐的解决方案并使其正常工作时才回复,否则它很可能不起作用。
systemd 需要:
1. enable node
2. run pm2 start app
我尝试将两者放在一个 shell 中,但是当您启用 node 时,您将被放入子 shell 中,并且无法编写任何其他命令。
3. 显示一些代码
scl enable rh-nodejs10 bash
4. 描述预期和实际结果,包括任何错误消息
我希望节点/快速服务器在容器启动时侦听端口 3000。
我使用此处找到的 scl-utils/scl_source 技术在 RHEL 7 上重新启动时运行节点
$ cat /etc/profile.d/enablenodejs.sh
#!/bin/bash
source scl_source enable rh-nodejs10