在Docker容器之外访问日志

时间:2019-06-06 03:18:51

标签: python docker docker-compose

我在云服务器上使用命令“ docker-compose up”运行算法。其中一项服务(生产后端)在其容器内的某个位置(./logs/Log_ .txt)中写入日志,作为其执行的一部分。

我知道我可以在服务运行时使用“ docker logs”命令检查日志,但是一旦使用“ docker-compose down”将其停止,日志将永远丢失(因为容器被破坏了)。

所以我想我想将一个卷“挂载”到我的docker compose文件中,并将该log.txt文件的输出重定向到容器外部的〜目录。这是我的目录树的样子:

我尝试了docker compose文件中的所有组合,但均未成功。

例如,添加以下内容失败。

volumes:
- type: volume  # Also tried `bind` type and other syntaxes
- ./logs:/productionbackend/logs


.
├── docker-compose.yaml #THIS IS THE DOCKER-COMPOSE FILE STARTING MY SERVICES
├── productionfrontend
│   ├── Dockerfile
│   ├── app
│   │   ├── database.py
│   │   ├── main.py
│   │   └── requirements.txt
│   └── docker-compose.yaml
└── productionbackend
    ├── Dockerfile
    ├── backend.py
    ├── logs
    │   ├── Log_03_Jun_14.18.19_GMT.txt
    ├── requirements.txt
    ├── settings
    │   └── somefile.py
     ........

谢谢。

1 个答案:

答案 0 :(得分:3)

下一个:

volumes:
- type: volume  # Also tried `bind` type and other syntaxes
- ./logs:/productionbackend/logs

我不知道这是您的错别字还是其他错字,但这种语法似乎很奇怪,请参见official grammar

接下来,我给出一个最小的示例,供您参考:

docker-compose.yaml:

version: '3'
services:
  backend:
    image: alpine
    container_name: my_try
    volumes:
      - ./log_on_host:/productionbackend/logs
    command: sh -c 'echo "hi" > /productionbackend/logs/my_log.txt'

接下来是执行历史记录:

shubuntu1@shubuntu1:~/abc$ ls
docker-compose.yaml
shubuntu1@shubuntu1:~/abc$ docker-compose up -d
Creating network "abc_default" with the default driver
Creating my_try ... done
shubuntu1@shubuntu1:~/abc$ docker-compose down
Removing my_try ... done
Removing network abc_default
shubuntu1@shubuntu1:~/abc$ ls
docker-compose.yaml  log_on_host
shubuntu1@shubuntu1:~/abc$ cat log_on_host/my_log.txt
hi

从上方,您可以看到尽管my_try容器已被破坏,但我们仍然可以看到日志my_log.txt,其内容为主机上的hi。您需要像上面的最小示例一样修改您的类似内容,仅是仅供参考。