Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何重定向docker容器中的命令输出_Docker_Logging_Docker Compose_Output_Stdout - Fatal编程技术网

如何重定向docker容器中的命令输出

如何重定向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

这只是关于这个问题的另一个主题,但是除了运行以下命令之外,将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/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
来访问日志这可能会有所帮助:这些对我都不起作用。我只想把输出打印在外部文件中,就这样。