我在云服务器上使用命令“ docker-compose up”运行算法。其中一项服务(生产后端)在其容器内的某个位置(./logs/Log_
我知道我可以在服务运行时使用“ 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
........
谢谢。
答案 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
。您需要像上面的最小示例一样修改您的类似内容,仅是仅供参考。