关于此问题,这只是另一个话题,但是将docker容器命令STDOUT / ERR输出到文件的最佳方法是什么,而不是运行诸如
bash -c "node cluster.js >> /var/log/cluster/console.log 2>&1"
我不喜欢上面的事实,它导致了1个额外的进程,所以最终我得到2个进程而不是1个,而我的主集群进程不是PID = 1的那个。
如果我尝试
exec node cluster.js >> /var/log/cluster/console.log 2>&1
我收到此错误:
Error response from daemon: Cannot start container node:
exec: "node cluster.js >> /var/log/cluster/console.log 2>&1": executable file not found in $PATH
我正在通过docker-compose启动我的容器:
version: '3'
services:
node:
image: custom
build:
context: .
args:
ENVIRONMENT: production
restart: always
volumes:
- ./logs:/var/log/cluster
command: bash -c "node cluster.js >> /var/log/cluster/console.log 2>&1"
ports:
- "443:443"
- "80:80"
当我docker-compose exec node ps -fax | grep -v grep | grep node
得到1个额外的过程时:
1 ? Ss 0:00 bash -c node cluster.js >> /srv/app/cluster/cluster.js
5 ? Sl 0:00 node cluster.js
15 ? Sl 0:01 \_ /usr/local/bin/node /srv/app/cluster/cluster.js
20 ? Sl 0:01 \_ /usr/local/bin/node /srv/app/cluster/cluster.js
如您所见,bash -c
starts 1进程从另一方面分支了主节点进程。在docker容器中,command
始终由PID启动的进程为PID = 1,这就是我想要的节点进程。但是它将是5、6等。
谢谢回复。我设法通过创建一个bash文件来解决该问题,该文件以以下方式启动我的节点集群exec
:
# start-cluster.sh
exec node cluster.js >> /var/log/cluster/console.log 2>&1
并在docker-compose文件中:
# docker-compose.yml
command: bash -c "./start-cluster.sh"
启动群集时,exec
将用节点进程替换外壳程序,这样,它始终具有PID = 1,并且我的日志将输出到文件中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句