Docker,docker-compose,restart: unless-stopped在控制台中丢失日志

13

我有一个非常好用的docker-compose.yml版本3:

Translated text:

I have a very useful version 3 of docker-compose.yml:

version: '3'

services:

  db:
    image: postgres
    restart: unless-stopped
    ports:
      - "5432:5432"

redis:
    image: redis
    restart: unless-stopped
    ports:
      - "6379:6379"

  app:
    build: .
    restart: unless-stopped
    command: bash ./script.sh
    volumes:
      - bundle:/bundle
    ports:
      - "3000:3000"
      - "1234:1234"
    depends_on:
      - db
      - redis
    stdin_open: true
    tty: true

volumes:

  bundle: {}

我在Rails中使用它,并通过Windows端口1234附加进行调试。一切正常。

但是。

有时我的Rails服务器会崩溃。这是发生的事情。所以我需要app容器重新启动自己。它也确实做到了。但是我失去了我的powershell控制台中的日志记录。

使用docker-compose up启动时我可以看到一切。

app容器崩溃并重新启动时,我看不到来自“新”的app容器的任何内容。为什么?

如果我手动关闭那个app容器并手动启动它,则在先前重新启动的容器中出现的所有日志将再次向下滚动,就像尼亚加拉大瀑布一样!

是Bug吗?还是我的Bug?

1个回答

7
简单的答案是,这既不是Docker的Bug也不是你端的Bug =)
Docker日志与各自的容器附加在一起,因此,当您尝试查看日志时(在创建新应用程序容器之后),您会注意到它是空的,并且没有历史记录可以向上滚动。实际上,您正在寻找的日志已附加到已被删除并由新应用程序容器替换的旧容器中。
解决方法是,只需始终从Rails应用程序内部挂载卷到Docker外部的日志文件,这样您就不会丢失任何数据。
即使停止或删除容器,日志/数据也将持久存在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接