如何重定向docker容器中的命令输出
这只是关于这个问题的另一个主题,但是除了运行以下命令之外,将docker容器命令STDOUT/ERR输出到文件的最佳方式是什么如何重定向docker容器中的命令输出,docker,logging,docker-compose,output,stdout,Docker,Logging,Docker Compose,Output,Stdout,这只是关于这个问题的另一个主题,但是除了运行以下命令之外,将docker容器命令STDOUT/ERR输出到文件的最佳方式是什么 bash -c "node cluster.js >> /var/log/cluster/console.log 2>&1" 我不喜欢上面的事实是,它会导致一个额外的进程,所以最后我得到了2个进程而不是1个,而我的主集群进程不是PID=1的进程 如果我尝试 exec node cluster.js >> /var/log/clus
bash -c "node cluster.js >> /var/log/cluster/console.log 2>&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 ? 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
启动1个进程,另一方面,该进程派生主节点进程。在docker容器中,由命令启动的进程始终具有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
启动集群将shell替换为节点进程,这样它总是PID=1,我的日志输出到文件。您是否尝试过使用bash-c“node cluster.js”
然后您可以通过运行docker logs CONTAINER\u NAME
来访问日志这可能会有所帮助:这些对我都不起作用。我只想把输出打印在外部文件中,就这样。