Docker,docker-compose,重启:除非在控制台中停止松散日志

5 powershell ruby-on-rails docker dockerfile docker-compose

我有一个docker-compose.yml版本 3 效果很好:

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: {}
Run Code Online (Sandbox Code Playgroud)

我将它与 Rails 一起使用,并从 Windows 端口 1234 调试连接。一切正常。

但。

有时我的 Rails 服务器崩溃。它发生了。所以我需要app容器自行重启。确实如此。但是我丢失了 powershell 控制台中的日志。

当docker-compose up我开始时,我看到了一切。

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

如果我手动关闭该app容器并手动启动它,则来自重新启动容器之前的所有日志再次像尼亚加拉大瀑布一样向下滚动!

漏洞?我自己的错误?

M03*_*M03 7

简单回答,这既不是 docker bug,也不是你这边的 bug =)

Docker 日志分别附加到容器,因此当您尝试查看日志时(创建新的应用程序容器后),您会注意到它是空的,并且没有可以向上滚动的历史记录。事实上,您要查找的日志已附加到旧容器中,该容器已被删除并被新应用程序容器替换。

作为解决方法,只需始终将日志文件从 Rails 应用程序内的卷装载到外部 docker,这样就不会丢失任何数据。

即使您停止或删除容器,日志/数据也将是持久的。